gpt4 book ai didi

c++ - 在 JNI 中,尝试通过 CallObjectMethod 传递 bool 参数失败

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

我对 Java 和 JNI 比较陌生。我有一个 Java 实例方法void setState(Boolean done) 我正尝试使用 JNI 从 C++ 调用它

tbuff = env->GetObjectClass(buff);
jmethodID setStatemid = env->GetMethodID(tbuff, "setState", "
(Ljava/lang/Boolean;)V");

if(setStatemid==0){
return JNI_FALSE;
}

// Set the buffer to busy
env->CallObjectMethod(buff, setStatemid, true);

调用 CallObjectMethod() 崩溃。我也试过传递 JNI_TRUE 或 JNI_FALSE。似乎如果我传递 false 或 JNI_FALSE,我将它传递给方法,但传递的值为 null。如果我通过 true J​​VM 崩溃。基于此,我假设我没有正确传递 bool 对象。

感谢任何指导

最佳答案

Based on this I am assuming I am not passing a Boolean object properly.

您根本没有传递 Boolean 对象。您正在传递一个整数或 C++ bool 或任何具有值 true 的东西。

您需要传递一个 Java Boolean,而不是 true:具体来说,Boolean.TRUE,您必须首先通过 JNI 访问它.

更好的是,重新设计您的 setState() 方法以采用 boolean 并传递 JNI_TRUE

并且,由于该方法的返回类型为 void,您应该调用 CallVoidMethod(), 而不是 CallObjectMethod()

关于c++ - 在 JNI 中,尝试通过 CallObjectMethod 传递 bool 参数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47880401/

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