我正在尝试使用JNI RegisterNatives将本机函数绑定到Java。如果函数在全局范围内,我可以轻松地绑定函数,它可以正常工作。
但是当我尝试将C ++类成员函数绑定到Java时,回调不会被调用。
我的C ++函数的声明是这样的:
void native_onCall(JNIEnv* env, jobject obj, jint val)
Java函数看起来像这样。
public native void onCall(int a);
我试图绑定的本机函数与我的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函数来绑定函数指针,但它不起作用。
如果有人能指出使用JNI将类成员函数绑定到java的方法,或者我在这里做错了,那将非常有帮助。