现在有一个android项目,上层已经是一个一个对象。我现在要做的就是把这些对象拆解,取出其中基本元素的值。
如下所示:
假如我现在将一个Class A的对象传到本地代码,我怎么能够获取到Rect的left/top/right/bottom值?如果是Verctor<A B>这样更复杂的对象,我又怎么从中获取到Rect的left/top/right/bottom值?
    java code:        class A{
                Rect mrect;        }谢谢~~

解决方案 »

  1.   

    JNI里面处理 就用
    jclass cls = env->GetObjectClass(obj);
    然后 env->GetFieldID     env->GetIntField  
    类似反射获得属性
    JNI返回  就用
    env->NewObject   或者  env->NewObjectA
      

  2.   

    定义结构体:
    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);
      

  3.   

    关键Rect dirty;还在传过来的对象里面呢?
      

  4.   

    Rect dirty 是C++的对象,dirtyRect的类型是jobject,是Java传过来的对象。