gpt4 book ai didi

java - 将cpp函数指针转换为java接口(interface)方法

转载 作者:行者123 更新时间:2023-11-28 04:28:52 25 4
gpt4 key购买 nike

我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com