gpt4 book ai didi

android - 使用 C++ (JNI) 从 Java 对象读取整数字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:35 24 4
gpt4 key购买 nike

我正在尝试从 C++ 访问 Java 类中的“int”字段;其实我也尝试过其他类型。不过我可以调用方法。但不能访问字段。我得到的是随机垃圾值,而不是我期望的值。

这是我的 Java 代码:

private class MYView extends View {
public MYView(Context context) { super(context); five = 555; }
public int five;
....
}

C++部分:

jobject view = (jobject) Env->CallObjectMethod(Obj, jfindViewById, 3);
ClassMYView = Env->GetObjectClass(view);
jfieldID f = Env->GetFieldID(ClassMYView, "five", "I");
int i = Env->GetIntField(ClassMYView, f); <-- error is here, class is not object!

这是C++代码执行后得到的结果

view = 0x40521b80 
ClassMYView = 0x40521a70
f = 0x444727e4
i = 4390958 // supposed to be 555!

请有经验的人,我做错了什么??谢谢。

最佳答案

也许你想写

jobject obj = (jobject) Env->CallObjectMethod(Obj, jfindViewById, 3);
ClassMYView = Env->GetObjectClass(obj);
jfieldID f = Env->GetFieldID(ClassMYView, "five", "I");
int i = Env->GetIntField(obj, f);

编译器不会给你一个错误,因为基本上 jobject 和 jclass 是相同的类型。

关于android - 使用 C++ (JNI) 从 Java 对象读取整数字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17038793/

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