我一直在研究如何从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对象上找到任何东西......
答案 0 :(得分:3)
您向getStatiticMethodInfo
提供的签名与该方法不符。对于采用int
参数并返回Object
的方法,签名应为:(I)Ljava/lang/Object;
答案 1 :(得分:1)
仔细检查您的包名和类名是否正确,以及签名是否与javap -s的输出一致。
但这是一个糟糕的设计。