有没有人有一个很好的解决方案将一些 C# 代码集成到 Java 应用程序中?
代码很小,所以我可以用java重新编写,但如果可能的话,我宁愿重用代码。不要重复自己等等。
另外,我知道我可以将 C# 公开为 Web 服务或其他任何东西,但它里面有一些安全/加密的东西,所以如果可能的话,我宁愿保持它的紧密集成。
编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时无关紧要。
有没有人有一个很好的解决方案将一些 C# 代码集成到 Java 应用程序中?
代码很小,所以我可以用java重新编写,但如果可能的话,我宁愿重用代码。不要重复自己等等。
另外,我知道我可以将 C# 公开为 Web 服务或其他任何东西,但它里面有一些安全/加密的东西,所以如果可能的话,我宁愿保持它的紧密集成。
编辑:它将在基于服务器的应用程序上,因此“下载”另一个运行时无关紧要。
您将使用 Java 本机接口来调用编译成 DLL 的 C# 代码。
如果它是少量的 C#,将它移植到 Java 会容易得多。如果它很多,这可能是一个很好的方法。
这是它的高级概述:
http://en.wikipedia.org/wiki/Java_Native_Interface
您的另一个选择是从 C# 代码创建一个 COM 程序集并使用 J-Interop 来调用它。
我是jni4net的作者,它是 JVM 和 CLR 之间的开源进程内桥梁。它建立在 JNI 和 PInvoke 之上。无需 C/C++ 代码。我希望它会帮助你。
如果它很短,我认为你最好用java重写代码。下载一个 50Mb 的运行时已经够糟糕的了。
我们为此使用了JNBridge,效果很好。它处理 Java->.NET,反之亦然,所有进程都在进程内。
如果您不想将 hadle 重写为进程间通信,请选择以下之一:
如果不是太麻烦,我会重写它。Web 服务可以工作,但似乎仅重用一点代码就会产生很多开销。
http://www.infoq.com/articles/in-process-java-net-integration建议在同一进程空间中运行 CLR 和 JVM 并来回传递调用。听起来很有效率。如果它运行良好,我将尝试将它集成到Jace中。
如果它是一段可作为命令行实用程序公开的代码,我只需让其他宿主语言使用系统调用来执行该实用程序。
如果您的 C# 应用程序需要调用 Java,请编译一个特殊的 Java main,它采用适当的命令行参数并返回文本输出。
它是最古老、最简单的方法。
您可以通过桥接库调用您的 c# 类(编译在 dll 中),可以使用各种库,每个库都有自己的特点。JNBridge生成代理类,您可以调用这些代理类来管理 java 类中的代码。JCOBridge允许您加载您的 c# 类并使用调用机制从 java 中使用它,javanet 还允许您导入 java 类并使用调用机制调用 java 代码。
所有探索的解决方案都是商业解决方案,可让您从 .NET 调用 java 代码,反之亦然,具有图形用户界面集成和其他便利。
链接:
jnbridge java-.NET bridge 开发者和部署许可证模式,30 天免费试用
jcobridge java-.NET bridge 开发者和部署许可证模式,无限试用
java-.NET桥研究和专业许可证模式,30 天无限制试用后报名