c++ 中的 JNI CallIntMethod 返回错误值
Posted
技术标签:
【中文标题】c++ 中的 JNI CallIntMethod 返回错误值【英文标题】:JNI CallIntMethod from c++ returns wrong value 【发布时间】:2013-09-19 11:24:15 【问题描述】:我使用 JNI 在我的(古老的,VC6)MFC 应用程序中嵌入一些 Java 面板。当我为 Java 类中的某些测试方法调用 CallIntMethod 时,我没有得到预期的值。
也许一个类似的问题是this,但是我的问题没有解决方案,所以我问了一个新问题。
我的代码如下:
JAVA:
public int int_test()
return 22;
C++:
jmethodID testmethod = env->GetMethodID(clsBean, "int_test", "()I");
if (testmethod)
// this one gets me some random number
jint val = env->CallIntMethod(clsBean, testmethod);
int a = (int)val;
编辑(关于 mkaes 的回答):
这个
jint val = env->CallIntMethod(clsBean, testmethod);
调用jni.h中声明的这个方法:
jint CallIntMethod(jobject obj, jmethodID methodID, ...)
va_list args;
jint result;
va_start(args,methodID);
result = functions->CallIntMethodV(this,obj,methodID,args);
va_end(args);
return result;
最后调用了这个:
jint (JNICALL *CallIntMethodV)
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
所以我认为这个 jobject obj 是我对 Java 类的引用,而 jmethodID methodID 是对要调用的函数的引用。抱歉,如果不是对 Java 类的引用,我不知道我要传递什么项目。
【问题讨论】:
CallIntMethod result -1 - android JNI的可能重复 我已经阅读了这个问题,但提供的答案没有帮助:( 【参考方案1】:你没有为你的类使用对象。
jmethodID testmethod = env->GetMethodID(clsBean, "int_test", "()I");
clsBean
是类 ID。
jint val = env->CallIntMethod(clsBean, testmethod);
第二个参数需要是您调用此方法的对象。除非您将方法更改为静态。
然后你可以使用CallStaticIntMethod
【讨论】:
谢谢,明白了! GetMethodID 从类中获取方法,然后您可以在该类的 INSTANCE 上调用 CallIntMethod。非常感谢提示以上是关于c++ 中的 JNI CallIntMethod 返回错误值的主要内容,如果未能解决你的问题,请参考以下文章
通过从 qt 中的 c++ JNI 发送字符串在 Android 中显示 Toast
JNI - C++/Java 中的侦听器 - 是不是可以在 C++ 中实例化 Java 对象并将它们用作参数