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

Binding a C++ class member function to Java using JNI

本文关键字:函数 绑定 Java 成员 JNI 使用      更新时间:2023-10-16

我试图使用JNI寄存器命令将本机函数绑定到Java。如果功能在全局范围中,我可以轻松地绑定该功能,并且它可以无问题。

但是,当我尝试将C 类成员函数绑定到Java时,回调不会被调用。

我的C 函数的声明就是这样:

void native_onCall(JNIEnv* env, jobject obj, jint val)

Java功能看起来像这样。

public native void onCall(int a);

我试图绑定的本机函数与我的登记剂方法调用在同一类中。这是我如何使用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函数来绑定功能指针,但它不起作用。

如果有人可以指出一种将类成员函数绑定到JAVA的方法,或者我在这里做错了什么,那真的很有帮助。

显然使用实例成员函数并不是这样做的方法。通过使用静态函数,我设法处理了类中的呼叫。