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 ,所以我認爲一切都好。
可以通過這樣的工作項目嗎?
你是否有一個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