从Java调用C#代码?

时间:2008-09-08 18:46:10

标签: c# java java-native-interface

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

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

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


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

10 个答案:

答案 0 :(得分:29)

您可以使用Java Native Interface来调用编译成DLL的C#代码。

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

以下是对它的高级概述:

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

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

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

答案 1 :(得分:17)

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

答案 2 :(得分:7)

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

答案 3 :(得分:4)

有一个IL to Java Bytecode编译器GrassHopper可能对您有用。我从来没有尝试过。

我会考虑用Java重写你的代码

编辑:请注意,Grasshopper似乎已不再可用。

答案 4 :(得分:3)

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

答案 5 :(得分:2)

如果您不想重写处理它Inter-process communication并选择以下之一:

  • 命名管道
  • 套接字
  • SOAP

答案 6 :(得分:0)

如果不是太麻烦,我会改写它。 Web服务可以工作,但似乎重用一些代码会带来很多开销。

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

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

答案 9 :(得分:0)

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

链接
jnbridge具有30天免费试用期的Java-.NET桥开发人员和部署许可证架构
jcobridge java-.net网桥开发人员和部署许可证架构,具有无限试用版
javonet Java-.NET桥接研究和专业版许可模式,注册后可进行30天的无限试用期