最好能够传递对象等等

解决方案 »

  1.   

    晕,你应该到C++版去问才对啊,这是JAVA版,我们怎么知道。
      

  2.   

    // JAVA
    class Callbacks {
      private native void nativeMethod(int depth);
      private void callback(int depth) {
        if (depth < 5) {
          System.out.println("In Java, depth = " + depth + ", about to enter C");
          nativeMethod(depth + 1);
          System.out.println("In Java, depth = " + depth + ", back from C");
        } else
          System.out.println("In Java, depth = " + depth + ", limit exceeded");
      }
      public static void main(String args[]) {
        Callbacks c = new Callbacks();
        c.nativeMethod(0);
      }
      static {
        System.loadLibrary("MyImpOfCallbacks");
      }
    }// C ++
    JNIEXPORT void JNICALL
    Java_Callbacks_nativeMethod(JNIEnv *env, jobject obj, jint depth)
    {
        jclass cls = (*env)->GetObjectClass(env, obj);
        jmethodID mid = (*env)->GetMethodID(env, cls, "callback", "(I)V");
        if (mid == 0) {
            return;
        }
        printf("In C, depth = %d, about to enter Java\n", depth);
        (*env)->CallVoidMethod(env, obj, mid, depth);
        printf("In C, depth = %d, back from Java\n", depth);
    }
      

  3.   

    其实也就是GetObjectClass -->GetMethodID-->Call<Primary>Method 的过程
      

  4.   

    建议楼主去看看J2SE的源码,具体是src.zip里面,launcher目录下的4个文件:
    java.c
    java.h
    java_md.c
    java_md.hjava.exe就是这几个文件编译成的。