作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直在研究如何从 C++ 到 Java 进行 JNI 调用,到目前为止我没有遇到任何问题,我设法调用了几乎任何类型的函数。我说几乎,因为现在我正面临这种情况:
在 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;
}
}
NOTE: (Although I think it is obvious) note that the getStaticMethodInfo method sets the whole process of identifying a method in a Java class. It works with every other function that I call, except for this one.
这是我唯一想做的事情...我很确定它与指定方法类型的签名有关,但也许我错了。到目前为止,我已经找到了有关获取类对象或字符串的已回答问题,但我还没有在适当的 Java 对象上找到任何内容...
最佳答案
您提供给 getStatiticMethodInfo
的签名与方法不匹配。对于采用 int
参数并返回 Object
的方法,签名应为:(I)Ljava/lang/Object;
/p>
IIRC,方法签名语法在几个地方进行了描述,包括:
关于java - 如何从 JNI 调用(C++)获取 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796226/
我是一名优秀的程序员,十分优秀!