Java app&C app集成/通信

我们有两个代码库,一个用C(MS VS 6)编写,另一个用Java编写(JDK 6).
寻找创造性的方法让两人互相交谈.

更多细节:

两个应用程序都是GUI应用程
重大改写或翻译不是一种选择.
通信需要双向.
尽量避免涉及将文件写入磁盘的任何事情.

到目前为止,考虑的选项是:

>零MG
> RPC
> CORBA
> JNI
>将Java编译为本机代码,然后进行链接

本质上,除了最后一项之外,这可以归结为在Java应用程序和C应用程序之间实现进程间通信的各种方法之间的选择.仍然接受其他创意建议!

如果你曾尝试过这个或类似的东西,请提出你的建议,经验教训,避免陷阱等等.

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

解决方法:

嗯,这取决于您希望这些应用程序的集成程度如何,以及您将来如何看待它们的发展.如果您只想在两者之间传递数据(例如,您希望一方能够打开另一方写入的文件,或直接从另一方读取流),那么我会说protocol buffers是您最好的选择.如果您希望其中一个GUI应用程序呈现的窗口实际嵌入到另一个GUI应用程序的面板中,那么您可能希望使用JNI方法.使用JNI方法,您可以使用SWIG来自动化大量的内容,尽管它具有危险的神奇功能并且带有许多警告(例如,它在功能重载方面做得不好).

我强烈建议不要使用CORBA,RMI和类似的远程过程调用实现,主要是因为根据我的经验,它们往往非常重,并且消耗大量资源.如果你确实想要类似于RMI的东西,我会建议你传递消息的重量较轻的东西,而不是实际的对象(如RMI的情况).例如,您可以使用协议缓冲区作为消息格式,然后只需在正常套接字之间来回串行化.

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

上一篇:c# – 串口重定向或拆分


下一篇:使用Python中的“subprocess”调用Java应用程序并阅读Java app输出