我在公司中使用JNI,需要将一些Java类型转换为相应的C ++类型。我已经成功地将Java String转换为C ++数组,但是现在我在与其他Java.lang类型作斗争。我需要将Java.lang.Integer和Java.lang.Boolean转换为相应的C ++类型。从String转换到Integer转换,我采用了相同的原理,但是我只得到了一些错误的数字。仅供参考:我需要从单独的类中调用变量。因此,在foo.bar.IntField中使用了Integer,在foo.bar.BooleanField中使用了布尔型到目前为止,这是我所拥有的:
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值也是如此。我应该得到一个错误,但该方法返回true。如果使用CallInt或CallBooleanMethods,也会返回相同的错误值。对于字符串,有一种获取StringUTFChars的方法。我认为这是一个格式错误。希望我的解释很好,您可以帮助我。
编辑:正如汤姆·布洛杰特(Tom Blodget)所建议,我将我的答案发布为答案。
我发现了问题:我需要从IntField获取整数,并且需要在此对象上intValue
从Integer类调用该方法。
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;
布尔值也是如此。
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;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句