将 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. 
}