JNI:从C++中调用一个需要对象的方法
问题描述:
我有一个简单的问题,我似乎无法找到答案。我已经用C++编写了一个方法,它应该调用一个接受对象的Java方法。例如,我的Java代码有:JNI:从C++中调用一个需要对象的方法
public class MyClass {
public class ReturnType {
...
}
public void methodToBeCalledFromC(ReturnType obj) {
...
}
}
而我的C++有:
const jclass classID = s_env->FindClass(className);
const jmethodID methodID = s_env->GetMethodID(classID, "methodToBeCalledFromC", "(LMyClass;)V");
// The call.handler() function returns a reference to the ReturnType object
// This produces a compilier warning and causes a seg-fault.
s_env->CallVoidMethod(call.handler(), jmid, userInfo);
我已经检查classid与放在methodID还有call.handler()
返回一个我称之为NewGlobalRef()
为jbject ,所以我认为一切都好。
可以通过这样的工作项目吗?
答
检查编译器警告 - 它可能是告诉你一些重要的东西!
+0
警告是:警告:无法通过'...'传递非POD类型'class UserInfo'的对象;调用将在运行时中止。 – Gianni 2011-05-10 19:56:19
你是否有一个jobject引用你想调用该方法的对象? – Daff 2011-05-10 19:13:12
是的。它是call.handler()函数调用的返回类型。该类基本上持有对象,并创建一个Global ref来确保它具有与持有它的C++对象相同的生命周期。如果那不起作用(它没有),我比这个错误早得多。 – Gianni 2011-05-10 19:15:57
你提到的编译器警告是什么? – 2011-05-10 19:18:34