public class TestNative {
public native void helloNative1();
public static native void helloNative2();
static {
System.load(System.getProperty("user.dir") + "/xxx.dll");
}
public static void main(String[] args) {
new TestNative().helloNative1();
TestNative.helloNative2();
}
}
※System.getProperty("user.dir") 為專案路徑
※xxx.dll 為 c 的程式碼變成的
產生 dll 的方法:
1.到 TestNative.java 打上 javac TestNative.java -h .
會產生副檔名為 h 和 class 的檔案
2.將副檔名為 h 的檔案複製一份出來改檔名為 cpp,完成後為如下的圖:
3.修改 cpp 檔案的內容,這個就是要實作 native 的內容
#include <jni.h>
#include <stdio.h>
#include "TestNative.h"
JNIEXPORT void JNICALL Java_TestNative_helloNative1
(JNIEnv *, jobject) {
printf("%s", "helloNative1\n");
}
JNIEXPORT void JNICALL Java_TestNative_helloNative2
(JNIEnv *, jclass) {
printf("%s", "helloNative2\n");
}
※要 include TestNative.h
4.到 sourceforge.net 下載 c 的編譯器 MinGW-w64,然後如下下載,並解壓
5.進入解壓後的資料夾的 bin
打上 gcc --version,出現版本號表示可以用 gcc 這個指令了
再打上 gcc -I "C:\Program Files\Java\jdk1.8.0_202\include" -I "C:\Program Files\Java\jdk1.8.0_202\include\win32" --shared -o xxx.dll D:\JavaProject\src\TestNative.cpp
會產生 xxx.dll 的檔案
※-I 表示 include,要包含兩個檔案,因為 3 的檔案要用到 jni.h,這個檔案在 include 裡;然後 jni.h 這個檔案還要 include jni_md.h,這個檔案在 include\win32
※-o 為 output,後面接想輸出的檔案名稱
※最後是 cpp 所在路徑
6.將得到的 xxx.dll 放在專案路徑下即可,其他 cpp、h 都可以不需要,結果畫面如下:
沒有留言:
張貼留言