gpt4 book ai didi

java - 如何从 JNI 调用(C++)获取 Java 对象?

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:52 24 4
gpt4 key购买 nike

我一直在研究如何从 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,方法签名语法在几个地方进行了描述,包括:

  • JNI 规范,以及
  • JVM 规范

关于java - 如何从 JNI 调用(C++)获取 Java 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9796226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com