从Java调用C ++应用程序通过JNI调用c ++回调

时间:2013-02-06 01:05:45

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

我有一个需要与Java库连接的C ++应用程序。我想从Java端收到通知,因此需要回调到C ++应用程序。我发现了许多关于从C ++调用Java函数的例子(这是很容易的部分),并从Java调用从DLL导出的C / C ++函数。

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

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

如果有一个比我要求的更好的方法是整体应用:

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

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

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

1 个答案:

答案 0 :(得分:3)

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