java - 将 JNI 类型转换为 C++ 类型

标签 java c++ java-native-interface

我在公司使用JNI,需要将一些Java类型转换为相应的C++类型。我成功地将 Java 字符串转换为 C++ 数组,但现在我正在努力处理其他一些 Java.lang 类型。 我需要将 Java.lang.Integer 和 Java.lang.Boolean 转换为相应的 C++ 类型。我从字符串转换到整数转换采用了相同的原则,但我只得到一些错误的数字。仅供引用:我需要从单独的类中调用变量。因此,在 foo.bar.IntField 中使用 Integer,在 foo.bar.BooleanField 中使用 Boolean 这是我到目前为止所拥有的:

jclass fieldClass = env->FindClass("foo/bar/IntField");
jmethodID getValue = env->GetMethodID(fieldClass, "getValue", "()Ljava/lang/Integer;");
jint value = (jint)env->CallObjectMethod(fieldObject, getValue);
int val = (int)value;

我遇到的问题是我没有从该方法中获得正确的数字。我应该得到 0,但该方法返回 267713816。 bool 值也是如此。我应该得到一个 false,但该方法返回 true。如果使用 CallInt 或 CallBooleanMethods,也会返回相同的错误值。 对于字符串,有一种方法可以获取 StringUTFChars。我认为这是一个格式错误。我希望我的解释很好并且你可以帮助我。

编辑:根据 Tom Blodget 的建议,我将我的答案发布为答案。

最佳答案

我发现了问题:我需要从 IntField 获取整数,并且在这个对象上我需要从 Integer 类调用 intValue 方法。

jclass integerClass = env->FindClass("java/lang/Integer");
jmethodID integerID = env->GetMethodID(integerClass, "intValue", "()I");
jint jintVal = (jint)env->CallIntMethod(value, integerID);
int val = (int)jintVal;

boolean 值也是如此。

jclass BooleanClass = env->FindClass("java/lang/Boolean");
jmethodID booleanID = env->GetMethodID(BooleanClass, "booleanValue", "()Z");
jboolean jBoolVal = (jboolean)env->CallBooleanMethod(jBoolean, booleanID);
bool boolVal = (bool)jBoolVal;

关于java - 将 JNI 类型转换为 C++ 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24754375/

相关文章:

java - 从 long 到十进制类型对象的转换类型错误

c++ - Visual Studio 2005 中的 "Attach to Process "

java - C++/JNI - 存储对象 (jobject) 在 vector 和数组中意外更改,C++ 或 JNI 问题?

android - 用手指移动 OpenGL 对象

c++ - jObjectArray 尚未声明

java - 如何在不使用配置程序的情况下调整 Tomcat 5.5 JVM 内存设置

Java:使用二元运算符比较两个数组

java - 我在哪里可以找到 javax.swing.BorderLayout 类的源代码?

c++ - 我可以在 glTexImage2D 调用后释放分配给 Image 的内存吗?

c++ - 用更合适的类替换 `std::vector`