2011-05-10 85 views
3

我有一个简单的问题,我似乎无法找到答案。我已经用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

你是否有一个jobject引用你想调用该方法的对象? – Daff 2011-05-10 19:13:12

+0

是的。它是call.handler()函数调用的返回类型。该类基本上持有对象,并创建一个Global ref来确保它具有与持有它的C++对象相同的生命周期。如果那不起作用(它没有),我比这个错误早得多。 – Gianni 2011-05-10 19:15:57

+2

你提到的编译器警告是什么? – 2011-05-10 19:18:34

回答

3

检查编译器警告 - 它可能是告诉你一些重要的东西!

+0

警告是:警告:无法通过'...'传递非POD类型'class UserInfo'的对象;调用将在运行时中止。 – Gianni 2011-05-10 19:56:19

相关问题