将 cpp 函数指针转换为 java 接口方法
Converting cpp function pointer to java interface methods
我有一个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中获取函数指针并与接口进行映射,使得应用程序class调用接口方法时,调用cpp函数回调??
请帮忙。
您的 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.
}
我有一个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中获取函数指针并与接口进行映射,使得应用程序class调用接口方法时,调用cpp函数回调??
请帮忙。
您的 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.
}