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

Calling a c++ callback from Java invoked from C++ application via JNI

本文关键字:c++ Java 中的 回调 调用 应用程序 JNI 通过      更新时间:2023-10-16

我有一个C++应用程序,它需要与Java库接口。我想从Java端接收通知,所以它需要回调到C++应用程序。我发现了许多从C++调用Java函数的例子(这是简单的部分),以及从DLL导出的Java调用C/C++函数的例子。

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

有了直接的C++,这当然很容易。我只需将一个函数指针传递给该类,该类将在需要时作为回调进行调用。当我调用Java函数时,我该如何做到这一点?

如果有一个比我在这里要求的更好的方法,那就是整个应用程序:

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

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

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

我找到了。环境类中有一个函数,名为"RegisterNatives"。有了这个,我可以在运行时为任何Java类注册C++回调。我试过了,结果和预期的一样。