我一直在研究如何从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