【问题标题】:Calling running Java code from running C++ code and vice versa从正在运行的 C++ 代码调用正在运行的 Java 代码,反之亦然
【发布时间】:2012-06-15 15:52:08
【问题描述】:

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

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

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

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

感谢和问候

罗伯

【问题讨论】:

  • 您可以使用多种进程间通信方式。我一直是命名管道的粉丝,但它对你来说可能过于简单的抽象。请记住,虽然完全支持网络的 RPC 机制可能看起来有点矫枉过正,但您可以使用现有的库来完成这项艰巨的工作,并且它确实为您提供了跨网络或在同一主机上的多个虚拟机上分发应用程序的空间。未来等。

标签: java c++ java-native-interface rcp method-invocation


【解决方案1】:

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

https://github.com/danfickle/cppToJavaRpcStubGenerator

编辑:我认为 CORBA 是“标准”解决方案。但是,我书架上(但尚未阅读)的 1000 页 Java 和 CORBA 书表明存在学习曲线。您可能还希望查看 MessagePack、Thrift、ActiveMQ 等。抱歉,我无法提供更多帮助。

【讨论】:

  • 谢谢丹尼尔!尽管如此,RCP 对我来说似乎过于庞大并且存在一些性能问题。性能对我来说很重要,因为我的两个应用程序都将在短时间内交换数百万条消息。本地 java 应用程序和本地 C++ 应用程序之间的消息交换真的如此不寻常,以至于没有可用的标准解决方案吗?
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢埃德温!但我不知道如何开始。我应该使用 RMI 从 Java 调用 C++ 应用程序吗?我可以使用哪种 RCP 从 C++ 应用程序调用 Java 应用程序?我对 RCP 不是很熟悉。
猜你喜欢
  • 2014-05-22
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多