使用Java类与C#的互操作性

4

我有一个用Java(>1.5)编写的项目。

是否可以使用C#编写该项目的部分内容?
例如,GUI和调用在Java中编写的方法和实例化类?

如果可以,如何操作?

6个回答

19

我是jni4net的作者,这是一个开源的JVM和CLR之间的进程内桥接工具。它基于JNI和PInvoke构建,无需使用C/C++代码。希望它对你有所帮助。


8

如果没有类似于ikvm这样的东西 - 或者使用Web服务等在两个方面之间进行通信。基本上,这可能比将现有项目代码重写为C#或使用Java编写GUI要更加费力。


你能解释一下为什么使用dll方法不可行吗?重写对于小项目来说是一个选项,但是例如重写10万行可能会很昂贵... - Ilya
你需要同时运行CLR和JVM - 两个虚拟机不知道彼此的对象。 - Jon Skeet
你的意思是说,Ilya的答案不起作用? - Burkhard
Ilya的回答仅适用于使用Excelsior JET JRE的情况,且只适用于v3.7及以下版本。 - Jon Skeet
我修改了我的答案以避免混淆。 - Ilya

6

或者如果您不介意使用庞大的类库,可以使用IKVM.NET。https://github.com/jessielesbian/ikvm/ - Jessie Lesbian

4

看起来我的解决方案非常有限,只适用于特定版本的Java。

我可能会继续使用老好C :) 无法想象没有共享库怎么工作 :)

这个文档解释了如何从Java创建一个dll并在C代码中使用它。我不是C#或Java专家,但我确信你也可以在C#中加载外部dll。因此,这不是一个完整的解决方案,但我认为这是一个很好的起点。

通常,dll是混合语言的完美方式。


请注意,该文档仅适用于特定的JRE版本,且仅适用于特定(相当古老的-2005年)版本。 - Jon Skeet
就像我之前提到的,我并不是一个Java专家。这是否意味着在Java中创建动态链接库并不容易?在Java中如何共享库? - Ilya
Ilya:Java库以JAR文件的形式共享。它们本质上是压缩存档(我相信是zip格式),其中包含Java字节码编译文件和其他资源。 - Spoike

2

简单来说,你可以将你的Java类打包成jar文件,然后在C#中使用Process类执行并映射IO流。


任何示例,请 - Sai Ram Reddy

0

我在几年前(我相信是在2005年)对此进行了一些研究,认为JNBridgePro是最好的第三方产品。你可以在这里查看http://www.jnbridge.com/

祝好运!


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