35

有没有人有一个很好的解决方案将一些 C# 代码集成到 Java 应用程序中?

代码很小,所以我可以用java重新编写,但如果可能的话,我宁愿重用代码。不要重复自己等等。

另外,我知道我可以将 C# 公开为 Web 服务或其他任何东西,但它里面有一些安全/加密的东西,所以如果可能的话,我宁愿保持它的紧密集成。


编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时无关紧要。

4

10 回答 10

32

您将使用 Java 本机接口来调用编译成 DLL 的 C# 代码。

如果它是少量的 C#,将它移植到 Java 会容易得多。如果它很多,这可能是一个很好的方法。

这是它的高级概述:

http://en.wikipedia.org/wiki/Java_Native_Interface

您的另一个选择是从 C# 代码创建一个 COM 程序集并使用 J-Interop 来调用它。

http://sourceforge.net/projects/j-interop/

于 2008-09-08T19:01:06.040 回答
22

我是jni4net的作者,它是 JVM 和 CLR 之间的开源进程内桥梁。它建立在 JNI 和 PInvoke 之上。无需 C/C++ 代码。我希望它会帮助你。

于 2009-10-31T18:25:22.010 回答
7

如果它很短,我认为你最好用java重写代码。下载一个 50Mb 的运行时已经够糟糕的了。

于 2008-09-08T18:50:16.190 回答
4

有一个 IL to Java Bytecode compiler GrassHopper可能对你有用。我从来没有尝试过。

不过,我会考虑用 Java 重写您的代码

编辑:请注意,蚱蜢似乎不再可用。

于 2008-09-08T19:06:52.267 回答
3

我们为此使用了JNBridge,效果很好。它处理 Java->.NET,反之亦然,所有进程都在进程内。

于 2008-09-09T18:46:27.923 回答
2

如果您不想将 hadle 重写为进程间通信,请选择以下之一:

  • 命名管道
  • 插座
  • 肥皂
于 2008-09-08T21:01:06.377 回答
0

如果不是太麻烦,我会重写它。Web 服务可以工作,但似乎仅重用一点代码就会产生很多开销。

于 2008-09-08T18:50:35.860 回答
0

http://www.infoq.com/articles/in-process-java-net-integration建议在同一进程空间中运行 CLR 和 JVM 并来回传递调用。听起来很有效率。如果它运行良好,我将尝试将它集成到Jace中。

于 2009-04-21T20:44:41.557 回答
0

如果它是一段可作为命令行实用程序公开的代码,我只需让其他宿主语言使用系统调用来执行该实用程序。

如果您的 C# 应用程序需要调用 Java,请编译一个特殊的 Java main,它采用适当的命令行参数并返回文本输出。

它是最古老、最简单的方法。

于 2010-03-08T08:31:35.223 回答
0

您可以通过桥接库调用您的 c# 类(编译在 dll 中),可以使用各种库,每个库都有自己的特点。JNBridge生成代理类,您可以调用这些代理类来管理 java 类中的代码。JCOBridge允许您加载您的 c# 类并使用调用机制从 java 中使用它,javanet 还允许您导入 java 类并使用调用机制调用 java 代码。
所有探索的解决方案都是商业解决方案,可让您从 .NET 调用 java 代码,反之亦然,具有图形用户界面集成和其他便利。

链接
jnbridge java-.NET bridge 开发者和部署许可证模式,30 天免费试用
jcobridge java-.NET bridge 开发者和部署许可证模式,无限试用
java-.NET桥研究和专业许可证模式,30 天无限制试用后报名

于 2019-03-26T11:15:34.027 回答