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

标签 java c++ ipc

我们有两个代码库,一个用 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/

相关文章:

c++ - 循环语句警告的冒泡排序算法

c++ - 为什么 emplace_hint 比插入 map 慢?

python - FIFO 管道中的数据丢失?

c++ - 简单的匿名管道 - 你使用什么包装器模型? (WinAPI, C++)

java - 当使用自定义类对象作为 HashMap 的键时,从 Java HashMap 随机访问一个值?

java - 将资源(图像、声音位等)嵌入到 Java 项目中,然后使用这些资源

Java Eclipse PhoneGap。无法设置插件?

c++ - CPU 指令与持续时间

java - Windows 操作系统环境下 C++ 应用程序与 Java 应用程序之间的进程间通信

java - pig : Hadoop jobs Fail