最近需要用到JNI,所以抽时间学习了下,对于我这个N年没用过C/C++的,从没用过VS2005的java码农来说,真不容易,编译个dll都遇到莫名其妙的问题~~
下面就来一步一步开始JNI之路。
首先,我们写一个java类,声明几个native方法
package jni.test; public class JNIWrapper { public native void display(); public native double sum(double x, double y); public native double divide(double x, double y); }
然后,依次执行如下命令,依次得到class和.h文件
编译class ...\src>javac jni\test\JNIWrapper.java 生成头文件 ...\src>javah jni.test.JNIWrapper
到这里就得到了一个名为“jni_test_JNIWrapper.h”的头文件,其内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class jni_test_JNIWrapper */ #ifndef _Included_jni_test_JNIWrapper #define _Included_jni_test_JNIWrapper #ifdef __cplusplus extern "C" { #endif /* * Class: jni_test_JNIWrapper * Method: display * Signature: ()V */ JNIEXPORT void JNICALL Java_jni_test_JNIWrapper_display (JNIEnv *, jobject); /* * Class: jni_test_JNIWrapper * Method: sum * Signature: (DD)D */ JNIEXPORT jdouble JNICALL Java_jni_test_JNIWrapper_sum (JNIEnv *, jobject, jdouble, jdouble); /* * Class: jni_test_JNIWrapper * Method: divide * Signature: (DD)D */ JNIEXPORT jdouble JNICALL Java_jni_test_JNIWrapper_divide (JNIEnv *, jobject, jdouble, jdouble); #ifdef __cplusplus } #endif #endif