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

菲利普·伯恩哈特(Phillip Bernhardt)

我在公司中使用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)所建议,我将我的答案发布为答案。

菲利普·伯恩哈特(Phillip Bernhardt)

我发现了问题:我需要从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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将C#类型转换为类型数组的类型

来自分类Dev

将C#类型转换为类型数组的类型

来自分类Dev

将C ++类型转换为C#

来自分类Dev

JNI:强制转换后将基本类型转换为Jobject或Object类型的SetObjectArrayElement

来自分类Dev

将JSON转换为C#类型

来自分类Dev

将Python返回的类型转换为C ++

来自分类Dev

C ++将数字转换为类型的指针?

来自分类Dev

将类型Int转换为类型字节

来自分类Dev

将类型转换为基本类型

来自分类Dev

将元组类型转换为衰减类型

来自分类Dev

将类型的方法转换为类型的函数

来自分类Dev

将 Object 类型转换为 Float 类型

来自分类Dev

将类型转换为DBSet <>

来自分类Dev

将类型转换为Object [] []

来自分类Dev

将类型转换为数组

来自分类Dev

将类型转换InputStream转换为ObjectInputStream

来自分类Dev

C是否允许将结构类型强制转换为自身?

来自分类Dev

C ++模板将功能转换为功能对象类型

来自分类Dev

将Cython融合类型转换为C ++指针

来自分类Dev

C#-将EventArgs转换为通用事件类型

来自分类Dev

C#将枚举类型转换为结构

来自分类Dev

将动态类型转换为字典C#

来自分类Dev

将返回类型转换为数组C#

来自分类Dev

C#将数组转换为元素类型

来自分类Dev

将动态类型转换为字典C#

来自分类Dev

C ++类型将int强制转换为union

来自分类Dev

将C#类型参数转换为VB

来自分类Dev

将类名称变量转换为类类型c#

来自分类Dev

将C#的复杂类型转换为YAML