最近項目中設計到JNI的技術,對于VC++我是一知半解.JNI是知道和Native方法的接口,從來沒用過.但是摸了一會,還是感覺有點門路,搞定了JNI的難題以后,對于自己這點小小的進步不敢隱瞞,公開出來給還不了解的兄弟們作個參考.
Java中使用JNI調用DLL 1 編寫范例文檔 public class TestNative{ private native int add(int x,int y); public static void main(String[] args) { TestNative hh = new TestNative(); int r = hh.add(30,20); System.out.println("result = "+r); }
static { System.loadLibrary("DLL_0305"); } } 其中 LoadLibrary中的DLL文件名稱可以隨便定.只要做好的動態鏈接庫改名成這個字符串就可以了.而native函數的來源就是該動態鏈接庫. 2. 做好該步準備以后,用javac TestNative.java生成.class.檢驗語法. 3. 語法檢查通過以后,用javah TestNative生成.h的C頭文件. 4. 打開VC++6.0,新建-> 工程 -> win32 Dynamic-Link Library .在向導中選擇空工程. 5. 把剛才javah生成的那個頭文件加入工程 .然后 文件->新建->textFile 自己做一個.c文件.實現自己的native函數.清單如下:
#include<jni.h>
JNIEXPORT jint JNICALL Java_TestNative_add (JNIEnv *ev, jobject obj, jint x, jint y) { return x+y; } 備注: A 其中的jni.h通常在 jdk\include\ 可以先拷貝到VC安裝目錄下的include目錄下.一勞永逸,以后可以方便使用JNI技術. B 全部的數據類型需要考慮Java和VC的接口問題.用jint jstring 等. C 函數名稱和自動生成的.h文件中規定的一致.命名規則是: Java_使用類_方法名 6 全編譯一下工程. 如果沒有出錯,則此時生成動態鏈接庫成功. 把動態鏈接庫拷貝到TestNative.java所在的目錄上. 7 運行java TestNative看結果吧. | |