我们有两个代码库,一个用 C++ (MS VS 6) 编写,另一个用 Java (JDK 6) 编写。 寻找创造性的方式让两者相互交谈。
更多详情:
这两个应用程序都是 GUI 应用程序。
重大重写或翻译不是一种选择。
沟通需要是双向的。
尽量避免任何涉及将文件写入磁盘的事情。
目前考虑的选项是:
- 零毫克
- 远程调用
- CORBA
- JNI
- 将 Java 编译为 native 代码,然后链接
本质上,除了最后一项之外,这归结为在 Java 应用程序和 C++ 应用程序之间实现进程间通信的各种方式之间的选择。仍然对其他创意建议持开放态度!
如果您之前尝试过此操作或类似操作,请提出您的建议、经验教训、要避免的陷阱等。
毫无疑问,很快就会有人指出,这个问题没有唯一的正确答案。我想无论如何我都会利用 SO 社区的集体专业知识,并希望得到很多很好的答案。
最佳答案
好吧,这取决于您希望这些应用程序集成的紧密程度,以及您如何看待它们在未来的发展。如果你只是想在它们两者之间传递数据(例如,你希望一个能够打开另一个写入的文件,或者直接从另一个读取流),那么我会说 protocol buffers是你最好的选择。如果您希望这些 GUI 应用程序之一呈现的窗口实际嵌入到另一个 GUI 应用程序的面板中,那么您可能想要使用 JNI 方法。通过 JNI 方法,您可以使用 SWIG将其中的大部分自动化,尽管它是危险的魔法并且有许多警告(例如,它在函数重载方面做得不好)。
我强烈建议不要使用 CORBA、RMI 和类似的远程过程调用实现,主要是因为根据我的经验,它们往往非常重量级并消耗大量资源。如果您确实想要类似于 RMI 的东西,我建议您在传递消息的地方使用更轻量的东西,而不是实际的对象(就像 RMI 的情况一样)。例如,您可以使用 Protocol Buffer 作为消息格式,然后简单地将它们在普通套接字之间来回序列化。
Kit Ho 提到了 XML 或 JSON,但 Protocol Buffer 比这两种格式中的任何一种都有效得多,并且还具有直接内置到定义语言中的向后兼容性概念。
关于Java 应用程序和 C++ 应用程序集成/通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590583/