从Java调用C#代码?

37

有没有什么好的方法将一些C#代码集成到Java应用程序中?

这段代码很短,所以我可以重写成Java,但如果可能的话,我宁愿重用这段代码。不要重复自己等。

另外,我知道我可以将C#公开为Web服务或其他形式,但其中包含一些安全/加密内容,因此如果可能的话,我宁愿将其紧密集成。


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


如果是基于服务器的,平台是什么?我不知道COM互操作之类的东西在Mono上的表现如何,所以这是需要考虑的另一个因素。 - FlySwat
10个回答

33

22

我是 jni4net 的作者,它是一种基于 JNI 和 PInvoke 构建的开源进程内桥接器,用于连接 JVM 和 CLR。无需使用 C/C++ 代码。我希望它能对您有所帮助。


那看起来很酷,你有找到同时支持Linux和Windows的方法吗? - Manius

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

5

有一种将IL编译为Java字节码的编译器GrassHopper,可能对你有用。但我从未尝试过。

我建议你考虑用Java重写代码。

注意:据编辑所述,Grasshopper似乎已不再提供。


草蜢链接已经失效。 - Uncle Iroh
可能已不再可用。 - Tom Carter

3
我们在这方面使用了JNBridge,效果非常好。它可以处理Java到.NET以及.NET到Java的互操作,全部在进程内完成。

2
是的,这是一款商业产品。 - Barton

2

如果您不想重写,则可以将其视为进程间通信并选择以下之一:

  • 命名管道
  • 套接字
  • SOAP

1

您可以通过桥接库调用编译为dll的c#类,有各种不同的库可供选择,每个库都有其特点。 JNBridge 生成代理类,您可以调用这些类来管理java类中的代码。 JCOBridge 让您加载c#类并使用调用机制从java中使用它,而javonet则让您导入java类并使用调用机制调用java代码。
所有探索过的解决方案都是商业解决方案,可让您在.NET和Java之间调用代码,并具有图形用户界面集成和其他便利功能。

链接:
jnbridge java-.NET桥接开发人员和部署许可证模式,提供30天免费试用
jcobridge java-.NET桥接开发人员和部署许可证模式,提供无限试用
javonet java-.NET桥接研究和专业许可证模式,注册后提供30天无限试用


0
如果代码可以作为命令行实用程序公开,我只需让其他主机语言使用系统调用来执行该实用程序。
如果您的C#应用程序需要调用Java,则编译一个特殊的Java main函数,以适当的命令行参数并返回文本输出。
这是最古老、最简单的方法。

0

0

如果不麻烦的话,我会重写它。 网络服务可以工作,但似乎这样做会增加很多开销,只是为了重用一点代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接