我在公司使用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/