javaapp&;C++;应用程序集成/通信 我们有两个代码库,一个用C++编写(MS vs 6),另一个在java(JDK 6)中。 寻找创造性的方式让两人互相交谈

javaapp&;C++;应用程序集成/通信 我们有两个代码库,一个用C++编写(MS vs 6),另一个在java(JDK 6)中。 寻找创造性的方式让两人互相交谈,java,c++,ipc,Java,C++,Ipc,更多详情: 两个应用程序都是GUI应用程序。 不可进行重大改写或翻译。 通信需要是双向的。 尽量避免将文件写入磁盘 到目前为止,考虑的方案有: 零毫克 RPC 科尔巴 JNI 将Java编译为本机代码,然后链接 本质上,除了最后一个项目外,这也归结为在java应用程序和C++应用程序之间实现进程间通信的各种方法之间的选择。仍然欢迎其他创意建议 如果你曾经尝试过这一点,或者类似的事情,请加入你的建议、经验教训、要避免的陷阱等 毫无疑问,很快就会有人指出,这个问题没有一个正确的答案。我想我会利

更多详情:

两个应用程序都是GUI应用程序。
不可进行重大改写或翻译。
通信需要是双向的。 尽量避免将文件写入磁盘

到目前为止,考虑的方案有:

  • 零毫克
  • RPC
  • 科尔巴
  • JNI
  • 将Java编译为本机代码,然后链接

本质上,除了最后一个项目外,这也归结为在java应用程序和C++应用程序之间实现进程间通信的各种方法之间的选择。仍然欢迎其他创意建议

如果你曾经尝试过这一点,或者类似的事情,请加入你的建议、经验教训、要避免的陷阱等



毫无疑问,很快就会有人指出,这个问题没有一个正确的答案。我想我会利用SO社区的集体专业知识,并希望得到许多优秀的答案。

不知道要传输和交流多少数据以及什么类型的数据。 但为了简化方法,我建议使用基于HTTP协议的XML或Json

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

此外,如果你有其他的应用程序可以使用,这并不难,因为这两种技术都是跨语言的


如果我错了,请纠正我好吧,这取决于您希望这些应用程序的集成程度,以及您如何看待它们在未来的发展。如果您只想在它们之间传输数据(例如,您希望其中一个能够打开另一个编写的文件,或者直接从另一个读取流),那么我认为这是您的最佳选择。如果您希望其中一个GUI应用程序呈现的窗口实际嵌入到另一个GUI应用程序的面板中,那么您可能需要使用JNI方法。使用JNI方法,您可以使用它来自动化大量的工作,尽管它具有危险的魔力,并且附带了许多警告(例如,它在函数重载方面做得不太好)

我强烈建议不要使用CORBA、RMI和类似的远程过程调用实现,主要是因为根据我的经验,它们往往非常重,并且消耗大量资源。如果您确实想要类似于RMI的东西,我建议您在传递消息时使用更轻量级的东西,但不要使用实际对象(RMI就是这样)。例如,您可以使用协议缓冲区作为消息格式,然后简单地在普通套接字之间来回序列化这些缓冲区


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

使用Jacob()、JCom()或j-Interop()并使用COM进行通信。

因为您使用的是Windows,我建议使用。有一个Java库可以从中获得。

在这样的情况下,重写是不可取的,您必须编写JNI粘合代码,我强烈建议,它更简单,我想。@bguiz:您是如何处理的?任何建议都有帮助吗?这就是DDS的目的(发布/订阅)+1@g051051:谢谢你的建议,我会调查的+1@Ben Jaguar Marshall:谢谢你的建议,我会调查的