我有一个cpp函数指针:
using MyclassPtr = std::shared_ptr<Myclass>;
using UpdateCallback = std::function<void(const MyclassPtr&)>;
现在在Java中,我有一个接口:
public interface UpdateCallback {
void OnDataUpdate(MyClass data);
}
要求是cpp库应将自身添加为java事件的侦听器。因此,如果发生,cpp将调用setUpdateCallback(UpdateCallback)将其添加为应用程序事件的回调。
JNI方法:
void MyCustomClassJNI::setUpdateCallback(const UpdateCallback & callback)
{.......}
如何从cpp获取函数指针并将其与接口映射,以便在应用程序类调用接口方法时调用cpp函数回调?
请帮助。
答案 0 :(得分:1)
您的void OnDataUpdate(MyClass data);
实际上是将MyClass
数据对象传递给JNI。
MyClass
数据应该是C ++层的有意义的对象,而不是传递回调接口指针。
从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.
}