Java应用程序和C++应用程序的集成/通信

4
我们有两个代码库,一个用C++(MS VS 6)编写,另一个用Java(JDK 6)编写。 寻找创造性的方法使它们彼此通信。
更多细节: 两个应用程序都是GUI应用程序。 重写或翻译不是选项。 通信需要双向。 尝试避免涉及将文件写入磁盘的任何内容。
到目前为止,考虑的选项包括: 零MG RPC CORBA JNI 将Java编译为本机代码,然后链接
基本上,除了最后一项之外,这归结为在Java应用程序和C++应用程序之间实现进程间通信的各种方式之间的选择。仍然可以接受其他创意建议!
如果您以前尝试过这个或类似的问题,请提出您的建议,经验教训和要避免的陷阱等。
毫无疑问,很快就会有人指出,这个问题没有一个正确的答案。 我想利用SO社区的集体专业知识,并希望得到许多优秀的答案。

1
在像这样的情况下,如果重写是不可取的,并且您必须编写JNI粘合代码,我强烈建议考虑使用JNA并编写JNA粘合代码,因为它更简单,以我个人的看法。 - Mark Elliot
@bguiz:你在这方面进展如何?有没有任何建议对你有帮助? - Ben Jaguar Marshall
4个回答

1

嗯,这取决于您希望这些应用程序有多紧密集成以及您如何看待它们在未来的发展。如果您只想在两者之间传递数据(例如,您希望其中一个能够打开另一个写的文件,或直接从另一个读取流),那么我会说协议缓冲区是您最好的选择。如果您希望由这些GUI应用程序呈现的窗口实际上嵌入到另一个GUI应用程序的面板中,则可能需要使用JNI方法。使用JNI方法,您可以使用SWIG自动化大部分操作,但它具有一些注意事项(例如,它在函数重载方面表现不佳)。

我强烈建议不要使用CORBA、RMI以及类似的远程过程调用实现,因为在我的经验中,它们往往非常笨重并消耗大量资源。如果您确实想要类似于RMI的东西,我建议选择一些更轻量级的东西,其中您传递消息而不是对象(这是RMI的情况)。例如,您可以将协议缓冲作为消息格式,然后只需串行化这些消息并在正常套接字上来回传输。

Kit Ho提到了XML或JSON,但协议缓冲比这些格式都要高效得多,并且还具有直接内置定义语言的向后兼容性概念。


这就是DDS的作用(发布/订阅)。 - user195488

1

+1 @g051051:感谢您的建议,我会考虑的。 - bguiz

1

+1 @Ben Jaguar Marshall:谢谢你的建议,我会研究一下。 - bguiz

0

不知道你要传输和通信多少数据以及什么类型的数据。

但为了简化方式,我建议使用基于HTTP协议的XML或Json。

因为这两个应用程序都有很多库,你不需要花费太多精力来实现和理解。

此外,如果你有其他应用程序需要通信,也不难,因为这两种技术都是跨语言的。

如果我说错了,请纠正我。


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