从Java调用C#代码?

问题描述:

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

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

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


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

+0

如果它的Server Based,平台是什么?我不知道COM互操作与Mono有什么关系,所以这是另一个需要考虑的因素。 – FlySwat 2008-09-08 19:10:51

有一个IL到Java字节码编译GrassHopper这可能是你有帮助。我从来没有尝试过。

我想看看重写你的代码在Java中,虽然

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

+0

草斗链接被破坏。 – 2016-12-28 22:46:45

+0

可能不再可用 – 2016-12-29 11:00:41

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

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

您将使用Java Native Interface调用编译为DLL的C#代码。

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

这里是它的一个高级别概述:

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

你的其他选择是创建一个从C#代码中的COM组件,并使用J-互操作来调用它。

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

如果您不希望重写hadle它作为一个Inter-process communication并选择以下之一:

  • 命名管道
  • 套接字
  • SOAP

我们使用JNBridge此,它运作得很好。它处理Java - >。NET,反之亦然,所有进程。

+1

是的,这是一个商业产品。 – Barton 2014-10-29 23:58:32

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

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

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

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

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