【问题标题】:Calling a c++ callback from Java invoked from C++ application via JNI通过 JNI 从 C++ 应用程序调用的 Java 调用 C++ 回调
【发布时间】:2013-02-06 01:05:45
【问题描述】:

我有一个需要与 Java 库交互的 C++ 应用程序。我想从 Java 端接收通知,因此它需要回调 C++ 应用程序。我找到了很多关于从 C++ 调用 Java 函数(这是最简单的部分)和从 Java 调用从 DLL 导出的 C/C++ 函数的示例。

到目前为止,我发现的一切都是如何从 Java 应用程序中的外部 C++ 函数调用 Java 回调。我需要相反的。

使用直接的 C++,这当然很简单。我只需将一个函数指针传递给该类,该类会在需要时作为回调调用。当我改为调用 Java 函数时,我该怎么做?

如果有比我在这里要求的更好的方法是整体应用程序:

我的 C++ 应用程序需要访问外部服务器,该服务器会将数据流式传输回我的应用程序。访问 API 是基于 Java 的 API。我目前的计划是构建一个处理所有 API 调用的 Java 包装器。这个包装器将使用 JNI 从我的 C++ 应用程序中调用。当收到数据时,它会尽可能地处理它,然后将调整后的数据通知我的 C++ 应用程序。

总结一下如何从 Java 类调用 C++ 函数回调,而 Java 类又通过 JNI 从 C++ 应用程序调用。没有要加载的 DLL 供 Java 使用。虽然如果一切都可以正常连接,我可以根据需要制作一个。

函数路径:C++应用->Java类库->C++回调函数

【问题讨论】:

  • 您是否已经设法完成“C++ 应用程序 -> Java”部分?
  • “没有要加载的 DLL 供 Java 使用。”.... 在没有 DLL 的情况下编写 JNI 将非常困难。准备好制作一个(并开始simple以首先关闭界面。)
  • 我做了一些测试函数来验证加载 JNI 和调用 Java 类函数。这很容易。这是下一步——Java 回到我还不知道的 C++。
  • 从简单开始:我完全同意,这就是我现在想要确定的——Java -> C++ 之间的接口。到目前为止,我发现的所有示例都是从 Java 应用程序调用 C++ 库。但是,这不是我想要做的。

标签: java c++ callback java-native-interface


【解决方案1】:

我找到了。环境类中有一个名为“RegisterNatives”的函数。有了这个,我可以在运行时为任何 Java 类注册 C++ 回调。我试了一下,效果完全符合预期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-30
    • 2019-04-15
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多