现在有一个android项目,上层已经是一个一个对象。我现在要做的就是把这些对象拆解,取出其中基本元素的值。
如下所示:
假如我现在将一个Class A的对象传到本地代码,我怎么能够获取到Rect的left/top/right/bottom值?如果是Verctor<A B>这样更复杂的对象,我又怎么从中获取到Rect的left/top/right/bottom值?
java code: class A{
Rect mrect; }谢谢~~
如下所示:
假如我现在将一个Class A的对象传到本地代码,我怎么能够获取到Rect的left/top/right/bottom值?如果是Verctor<A B>这样更复杂的对象,我又怎么从中获取到Rect的left/top/right/bottom值?
java code: class A{
Rect mrect; }谢谢~~
jclass cls = env->GetObjectClass(obj);
然后 env->GetFieldID env->GetIntField
类似反射获得属性
JNI返回 就用
env->NewObject 或者 env->NewObjectA
struct ro_t {
jfieldID l;
jfieldID t;
jfieldID r;
jfieldID b;
};
static ro_t ro;
映射Java对象:
jclass rect = env->FindClass("android/graphics/Rect");
ro.l = env->GetFieldID(rect, "left", "I");
ro.t = env->GetFieldID(rect, "top", "I");
ro.r = env->GetFieldID(rect, "right", "I");
ro.b = env->GetFieldID(rect, "bottom", "I");
结构体赋值给C++对象成员:
Rect dirty;
dirty.left = env->GetIntField(dirtyRect, ro.l);
dirty.top = env->GetIntField(dirtyRect, ro.t);
dirty.right = env->GetIntField(dirtyRect, ro.r);
dirty.bottom= env->GetIntField(dirtyRect, ro.b);
反向设置Java对象成员:
const Rect& bounds(dirtyRegion.getBounds());
env->SetIntField(dirtyRect, ro.l, bounds.left);
env->SetIntField(dirtyRect, ro.t, bounds.top);
env->SetIntField(dirtyRect, ro.r, bounds.right);
env->SetIntField(dirtyRect, ro.b, bounds.bottom);