gpt4 book ai didi

java - 来自 C++ 的 JNI CallIntMethod 返回错误值

转载 作者:行者123 更新时间:2023-11-30 01:57:17 30 4
gpt4 key购买 nike

我正在使用 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 类的引用,我不知道我要传递什么 jobject。

最佳答案

您没有为您的类(class)使用对象。

jmethodID testmethod = env->GetMethodID(clsBean, "int_test", "()I");
clsBean 是类 ID。

jint val = env->CallIntMethod(clsBean, testmethod);
第二个参数需要是您调用此方法的对象。除非你把你的方法改成静态的。
然后你可以使用CallStaticIntMethod

关于java - 来自 C++ 的 JNI CallIntMethod 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18893310/

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