我一直在研究如何從C++到Java的JNI調用,到目前爲止我沒有任何問題,我設法調用幾乎任何類型的函數。 我說差不多,因爲現在我面對這樣的情況:如何從JNI調用(C++)獲取Java對象?
在Java中,我有這樣的功能:
public static Object getJObject(int id){
Object st = null;
switch (id){
case 0: st = "hello"; break;
case 1: st = "bye"; break;
case 2: st = 1; break;
case 3: st = 2; break;
case 4: st = 3; break;
}
return st;
}
正如你所看到的,這個函數返回一個不同類型的值給出的ID作爲參數收到。
嘗試從C++獲取該對象時出現問題。下面是使JNI調用的函數:
bool check(){
JniMethodInfo methodInfo;
jobject jobj;
bool b = getStaticMethodInfo(methodInfo, "org.example.act.activity", "getJObject", "()Ljava/lang/Object;");
if (!b){
CCLog("getJObject method not found");
return false;
}else{
jobj = methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID, 0);
return true;
}
}
注:(雖然我認爲這是明顯的)指出, getStaticMethodInfo方法設置在一個Java類識別方法的全過程。它適用於我呼叫的其他所有功能,除此之外。
這是我唯一想做的事......我很肯定這是關於指定方法類型的簽名,但也許我錯了。 到目前爲止,我已經找到了關於獲取類對象或字符串的答案,但是我沒有在適當的Java對象上找到任何東西...
它是如何失敗的?一個對象實例*是一個類實例。儘管我會認真地建議你圍繞該方法編寫一些Java包裝,以返回可能的最具體的類。無論如何,僅返回一個Object實例就是代碼異味。 – 2012-03-20 22:56:26