Я немного исследовал, как делать вызовы 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;
}
Как видите, эта функция возвращает значение другого типаучитывая идентификатор, полученный в качестве параметра.
Проблема возникает при попытке получить этот объект из 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-объекте ...