2011-05-10 38 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

相關問題