互操作性 java 和 c++ [关闭]

Posted

技术标签:

【中文标题】互操作性 java 和 c++ [关闭]【英文标题】:interoperability java and c++ [closed] 【发布时间】:2015-03-23 16:19:43 【问题描述】:

我想用两种不同的语言 java 和 c++ 编写一个程序,它需要在其 c++ 组件和 java 组件之间进行动态和交互式通信。我知道有 jni 和 jna 用于在 java 中调用本机方法,但我不这么认为方法适合我的目的。

例如:假设一个程序,它的用户界面是用 c++ 和其他用 java 编写的,我认为这两个组件的通信不能通过 jni 和 jna 来完成。例如 Open Office 是用 java 和 c++ 编写的。 我搜索了互联网并找到了一些进程间通信的方法 像共享内存,管道,信号,消息传递,......但我不知道进程间通信是我需要的。似乎 ipc 用于在两个不同的进程中通信软件,但我的程序都是一个进程(对吗?!)

所以我的问题是:其组件用不同语言编写的程序如何相互通信?以及我怎样才能做到这一点?

【问题讨论】:

您可以使用套接字,但您必须对数据进行反序列化/序列化。我见过人们使用临时文件作为在程序之间传递数据的缓冲区。我没有这方面的经验,但这只是一个建议。这是msdn上关于交流的链接msdn.microsoft.com/en-us/library/aa365574%28v=vs.85%29.aspx 我需要非常低的延迟,所以套接字不好。 “我知道有 jni 和 jna”...“但我认为这种方法不适合我的目的。”你为什么这么认为? JNI 似乎正是您正在寻找的。 “我不认为这两个组件的通信可以通过 jni 和 jna 来完成”再次,你为什么这么认为? 只是想知道:您认为如何在同一个进程中运行一些二进制文件……和一个 Java JVM?含义:当然有两个进程,当然需要进程间通信。 @mehrdad 您可以使用共享内存,但在 java 中这样做可能很困难,因此您可能不得不使用 jni 或 jna。 【参考方案1】:

JNI 正是为您所描述的目的而创建的;为什么它不是“你需要的”?

另一种选择:具有不同语言实现的消息代理,例如 http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol

但是当您强调延迟时,这可能不适合您。

【讨论】:

我在一家大型 IT 企业工作。我们正在使用 AMQ。够好了?!说真的 - 你应该依赖其他人的意见。您应该坐下来深入分析您的需求;然后你应该转向互联网,寻找可用的解决方案;对于他们中的每一个,应该再次了解每个选项的优缺点,以了解每个选项如何符合您的要求。选择选项 A 是因为有人告诉您某些“企业”正在使用它……可能会奏效;但你不会学到太多的表演。 使用谷歌,我花了 3 秒找到activemq.apache.org/activemq-real-time.html ...但您更愿意花 10 多秒来写下另一个问题。这就是我刚才告诉你的:如果你想成为一名认真的软件工程师,那就开始自己挖掘材料吧! (在这里问不是在挖)

以上是关于互操作性 java 和 c++ [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CryptoAPI C++ 使用 AES 与 Java 互操作

LuaJavaBridge - lua与java互操作的简单解决方案

Swift 与 C++ 互操作性讨论

C 和 C++ 中类型的互操作性

COM如何实现语言互操作?

C# 和 C++ 互操作