使用JNI将C 类成员函数绑定到Java
Binding a C++ class member function to Java using JNI
我试图使用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的方法,或者我在这里做错了什么,那真的很有帮助。
显然使用实例成员函数并不是这样做的方法。通过使用静态函数,我设法处理了类中的呼叫。
相关文章:
- 将自由函数绑定为类成员函数
- 有没有办法将重载的类函数绑定到函数对象?
- 如何将类 1 的 std::函数绑定到类 2 的函数?
- 如何将 STL 队列推送函数绑定到 std::函数?
- 如何在 C# 中将带有参数的函数绑定到包中
- 如何仅使用 c/python API 将 c++ 成员函数绑定到 python?
- 将非静态函数绑定到回调时出现问题
- 意外输出..函数绑定在虚拟表中的发生方式
- 将类实例函数绑定到 v8::FunctionTemplate
- 是否可以将匿名 lambda 函数绑定到对象以允许 lambda 中的代码访问对象的成员?
- 使用JNI将C 类成员函数绑定到Java
- 将静态成员函数绑定为回调
- 如何使用 boost::bind 将静态成员函数绑定到 boost::function
- 如何将C++函数绑定到xaml文本块属性
- boost::使用成员函数绑定回调的帮助
- 如何将成员函数绑定到 C++14 中的对象
- std::函数绑定到成员函数
- 将带有unique_ptr参数的函数绑定到 std::function<void()>
- 将常规函数绑定到 std::function
- std::将成员函数绑定到 nullptr 处的实例,导致看似随机的 this 指针