从运行C++代码调用正在运行的 Java 代码,反之亦然

Calling running Java code from running C++ code and vice versa

本文关键字:代码 运行 Java 反之亦然 C++ 调用      更新时间:2023-10-16

我的问题是如何从运行C++代码调用正在运行的Java代码,反之亦然。有几篇文章是关于从Java调用编译的c ++文件或从C调用JVM,unsing Java Native Interface(JNI)或Java Native Access(JNA)。但是,对我来说,这似乎不是调用运行代码的适当方法,因为在示例中仅调用已编译的库。

我的情况如下所示。本地计算机上运行两个应用程序。一个应用程序是基于Eclipse和Java的。另一个应用程序是基于C++的。我需要让他们双向沟通。也许这是RPC的一个案例?但我不需要通过网络交流。

我认为 RCP 可能是一种方式,但对我来说似乎过大,因为我不想通过网络进行交流,而且我不知道在这种情况下如何使用 RCP。我正在寻找更智能的解决方案。

有什么经验可以帮助我吗?

感谢和问候

您可能希望查看我对Java RPC解决方案的C++。给定一个 Java 类,它会生成一个C++客户端存根和 Java 服务器存根。

https://github.com/danfickle/cppToJavaRpcStubGenerator

编辑:我认为CORBA是"标准"解决方案。然而,我书架上(还没有读过)的1000页的《Java和CORBA》表明存在学习曲线。您可能还希望查看MessagePack,Thrift,ActiveMQ等。 对不起,我无法提供更多帮助。

JNI 允许您链接C++和 Java 代码;但是,两者是同一个程序。

如果要让一个程序调用另一个程序,最简单的方法是使用支持网络的技术。 RPC,CORBA,客户端/服务器套接字或任何其他方式(包括网络)将非常适合您。

存在更难的非网络堆栈解决方案,如共享内存、信号量、管道等;但是,它们需要一个支持它们的操作系统,并且受到使用方式的限制,此外,您还需要找到使用它们的两种语言的语言绑定。