我有一个cpp函数指针:
using MyclassPtr = std::shared_ptr<Myclass>;
using UpdateCallback = std::function<void(const MyclassPtr&)>;
现在在 java 中我有一个接口(interface):
public interface UpdateCallback {
void OnDataUpdate(MyClass data);
}
要求是 cpp 库应该将自己添加为 java 事件的监听器。因此,如果发生,cpp 将调用 setUpdateCallback(UpdateCallback) 将自身添加为对应用程序事件的回调。
JNI 方法:
void MyCustomClassJNI::setUpdateCallback(const UpdateCallback & callback)
{.......}
如何从cpp中获取函数指针并与接口(interface)进行映射,使得应用类调用接口(interface)方法时,调用cpp函数回调??
请帮忙。
最佳答案
您的 void OnDataUpdate(MyClass data);
实际上是将 MyClass
数据对象传递给 JNI。
MyClass
数据应该是对您的 C++ 层有意义的对象,而不是向下传递回调接口(interface)指针。
从 Java 方面
// Java code
public class MyCustomClassJNI implements UpdateCallback {
public native void notifyJni(MyClass data);
@Override
void OnDataUpdate(MyClass data) {
this.notifyJniPeer(data);
}
}
然后在 C++ 端,您应该有一个如下所示的 JNI 方法:
JNIEXPORT void JNICALL
Java_your_package_name_MyCustomClassJNI_notifyJni(JNIEnv *env, jobject myClassData) {
// read myClassData object.
}
关于java - 将cpp函数指针转换为java接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53514724/