1 public class testdll{ 2 static{ 3 System.loadLibrary("dllname");//不包含[.dll] 4 } 5 6 public native void sayHello(); 7 8 public static void main(String[] args){ 9 testdll test = new testdll();10 test.sayHello();11 }12 }
2.生成頭文件 testdll.h
javah testdll testdll.h文件內容如下:1 /* DO NOT EDIT THIS FILE - it is machine generated */ 2 #include <jni.h> 3 /* Header for class testdll */ 4 5 #ifndef _Included_testdll 6 #define _Included_testdll 7 #ifdef __cplusplus 8 9 extern "C" {10 #endif11 /*12 * Class: testdll13 * Method: sayHello14 * Signature: ()I15 */16 17 JNIEXPORT void JNICALL Java_testdll_sayHello(JNIEnv *, jobject);18 #ifdef __cplusplus19 }20 #endif21 #endif
函數名有特定格式,不能隨意修改,Java_class_method,而且只能由class類對象才能調用,因為JNI是通過類名來查找對應方法的。
3.生成動態庫 使用VS新建一個空的dll工程,將生成的頭文件導入工程。新建.c或者.cpp,實現頭文件中的函數:1 #include <stdlib.h>2 3 JNIEXPORT void JNICALL Java_testdll_sayHello4 (JNIEnv *env, jobject obj){54.編譯生成dll文件
將jni.h、jni_md.h文件復制到VS環境的include目錄下 jni.h------------------jdk安裝目錄/include jni_md.h-------------jdk安裝目錄/include/win32 編譯生成testdll.dll5.執行 將編譯好的.dll文件放到path環境變量的目錄下,或者放到eclipse工程的跟目錄下,然后執行Java程序即可。 也可以通過以下參數指定dll文件的目錄 java -Djava.library.path=dll文件的目錄
新聞熱點
疑難解答