本帖最后由 kigy 于 2010-10-20 13:54:59 编辑

解决方案 »

  1.   

    赶紧学jni吧
      

  2.   

    我已经知道方法了,还是非常感谢楼上的参与。
    贴上方法:A.1.3 传递和使用Java对象
    在前例中,我们将一个字串传递给固有方法。事实上,亦可将自己创建的Java对象传递给固有方法。
    在我们的固有方法内部,可访问已收到的那些对象的字段及方法。
    为传递对象,声明固有方法时要采用原始的Java语法。如下例所示,MyJavaClass有一个public(公共)字段,以及一个public方法。UseObjects类声明了一个固有方法,用于接收MyJavaClass类的一个对象。为调查固有方法是否能控制自己的自变量,我们设置了自变量的public字段,调用固有方法,然后打印出public字段的值。class MyJavaClass {
      public void divByTwo() { aValue /= 2; }
      public int aValue;
    }public class UseObjects {
      public static void main(String [] args) {
      UseObjects app = new UseObjects();
      MyJavaClass anObj = new MyJavaClass();
      anObj.aValue = 2;
      app.changeObject(anObj);
      System.out.println("Java: " + anObj.aValue);
      }
      private native void  
      changeObject(MyJavaClass obj);
      static {
      System.loadLibrary("UseObjImpl");
      }
    }编译好代码,并将.class文件传递给javah后,就可以实现固有方法。在下面这个例子中,一旦取得字段和方法ID,就会通过JNI函数访问它们。JNIEXPORT void JNICALL
    Java_UseObjects_changeObject(
      JNIEnv * env, jobject jThis, jobject obj) {
      jclass cls;
      jfieldID fid;
      jmethodID mid;
      int value;
      cls = env->GetObjectClass(obj);
      fid = env->GetFieldID(cls,
      "aValue", "I");
      mid = env->GetMethodID(cls,
      "divByTwo", "()V");
      value = env->GetIntField(obj, fid);
      printf("Native: %d\n", value);
      env->SetIntField(obj, fid, 6);
      env->CallVoidMethod(obj, mid);
      value = env->GetIntField(obj, fid);
      printf("Native: %d\n", value);
    }