【发布时间】:2017-02-23 04:10:23
【问题描述】:
我正在尝试使用 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 结构的 sn-p。
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 的方法,或者我在这里做错了什么,那将非常有帮助。
【问题讨论】:
标签: java c++ c java-native-interface