[英]How to get a Java Object from JNI call (C++)?
我一直在研究如何進行從C ++到Java的JNI調用,到目前為止,我還沒有遇到任何問題,我設法調用了幾乎所有類型的函數。 我說ALMOST,因為現在我正面臨這種情況:
在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對象上卻找不到任何東西...
您提供給getStatiticMethodInfo
的簽名與方法不匹配。 對於采用int
參數並返回Object
,簽名應為: (I)Ljava/lang/Object;
IIRC,方法簽名語法在以下兩個地方進行了描述:
仔細檢查軟件包和類名是否正確,簽名是否與javap -s的輸出一致。
但這是一個糟糕的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.