使用JNI将C ++类成员函数绑定到Java

时间:2017-02-23 04:10:24

标签: java c++ c java-native-interface

我正在尝试使用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的方法,或者我在这里做错了,那将非常有帮助。

0 个答案:

没有答案