我正在尝试使用 JNI RegisterNatives 将 native 函数绑定(bind)到 Java。如果该函数在全局范围内,我可以轻松地绑定(bind)该函数并且它可以毫无问题地工作。
但是当我尝试将 C++ 类成员函数绑定(bind)到 Java 时,回调不会被调用。
我的 C++ 函数的声明是这样的:
void native_onCall(JNIEnv* env, jobject obj, jint val)
Java 函数如下所示。
public native void onCall(int a);
我尝试绑定(bind)的 native 函数与我的 RegisterNatives 方法调用在同一个类中。这是我如何使用 typedef 定义函数指针并将其添加到 JNINativeMethod 结构的片段。
typedef void (MyClass::*func_pointer)(JNIEnv*, jobject, jint);
func_pointer cbptr;
JNINativeMethod[index].name = const_cast<char*>("onCall");
JNINativeMethod[index].signature = const_cast<char*>("(I)V");
JNINativeMethod[index].fnPtr = (void*)cbptr;
env->RegisterNatives(jclass, JNINativeMethod, index);
我还使用了 std::bind 和 lambda 函数来绑定(bind)函数指针,但它不起作用。
如果有人能指出一种使用 JNI 将类成员函数绑定(bind)到 java 的方法,或者我在这里做错了什么,那将非常有帮助。
最佳答案
显然,使用实例成员函数不是解决此问题的方法。 通过使用静态函数,我设法处理了类内部的调用。
关于java - 使用 JNI 将 C++ 类成员函数绑定(bind)到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406875/