JNIjw02
1、VC6(CPP)的DLL代码:
#include<stdio.h> #include "jniZ_JNIjw02.h" JNIEXPORT void JNICALL Java_jniZ_JNIjw02_TestZ (JNIEnv * env, jobject obj) { printf("Java_jniZ_JNIjw02_TestZ - 1\n"); // ∵ TestZ() 不是静态函数,∴传进来的就是调用这个函数的对象. // 否则就传入一个jclass对象表示native方法所在的类 jclass jni02_clazz = env->GetObjectClass(obj); jfieldID fieldID_prop = env->GetFieldID(jni02_clazz, "propertyZ", "I"); jmethodID methodID_func = env->GetMethodID(jni02_clazz, "FunctionZ", "(ILjava/util/Date;[I)I"); env->CallIntMethod(obj, methodID_func, 0L, NULL, NULL); // invoke ! printf("Java_jniZ_JNIjw02_TestZ - 2\n"); }
2、Java代码:
package jniZ; import java.util.Date; public class JNIjw02 { public int propertyZ; public int FunctionZ(int _foo, Date _date, int[] _arr) { System.out.println("FunctionZ"); return 0; } public native void TestZ(); public static void main(String[] args) { System.loadLibrary("JNIjwVC6_02"); JNIjw02 jni02 = new JNIjw02(); jni02.TestZ(); /* ZC: 为什么打印的顺序是这样的? : FunctionZ Java_jniZ_JNIjw02_TestZ - 1 Java_jniZ_JNIjw02_TestZ - 2 ZC: 个人觉得应该是这样啊 : Java_jniZ_JNIjw02_TestZ - 1 FunctionZ Java_jniZ_JNIjw02_TestZ - 2 */ } }
3、Java控制台输出:
FunctionZ
Java_jniZ_JNIjw02_TestZ - 1
Java_jniZ_JNIjw02_TestZ - 2
4、
5、