這是一個java call c 使用JNI的範例。
網路上有很多例子,有的使用VC6.0、有的用JCreator,
就是沒有Netbeans + Visual Studio 2005的範例。
因為環境不同造成設定path的地方不同讓自己找很久,
有些是重點卻沒也說清楚,因此自己發了這教學。
JNI(Java Native Interface)其實也是將c code包成dll檔案,
讓java去呼叫且執行。
開發環境:Netbeans, Microsoft Visual Studio 2005
1.使用Netbeans新增專案,選擇Java Application
2.專案名稱:JNIFirst
3.新增Java Class檔
4.檔名:JNIHello,注意不要將JNIHello.java包在package內,不然編譯.h檔時會error。
5.撰寫JNIHello.java內的code
6.接下來要產生.h檔,要用commend line的方式下指令,若你的電腦尚未設定用cmd下java指令的 話可以參考我寫的這篇"設定java環境變數使cmd能下javac等命令";首先要先切換到JNIHello.java檔的目錄下,下指令產生.class,再用class檔產生.h檔,指令:
javac JNIHello.java
javah -jni JNIHello
(2010.1.25新增:要是有package, 輸入指令javah -jni [PACKAGE].[CLASSNAME],並注意要移到package的上層資料夾.)
(2010.8.30新增:修改package名稱請檢查三部分-----1.重新產生.h檔 2.修改include檔名 3.修改function名稱. )
如圖中。
7.Netbeans使用暫告一段落。開啟Microsoft Visuall Studio 2005,新增專案選類別庫(library),
專案名稱:JNIHelloWorld。
8.將剛剛由Netbeans產生的JNIHello.h檔copy到此Project的JNIHelloWorld目錄下。
9.將專案自動產生的JNIHelloWord.h刪除,加入我們剛copy進來的JNIHello.h檔。(當然也可以在新增專案時將名稱設為JNIHello,這樣就不用改名稱直接覆蓋即可,此處為了要說明.h檔與Project的關係故意取不同名稱。)
10.加入JNIHello.h。
11.打開JNIHello.h檔看一下紅框處,function name為Java_JNIHello_printHelloWorld,撰寫cpp檔時就要用這個function。
12.撰寫JNIHelloWorld.cpp,code如圖中。
13.因為有include"jni.h"所以要設定VC的path讓它找的到。選工具->選項。
14.選VC++目錄,include檔案,新增path。
15.設定好之後可以來產生.dll檔案了,選擇建置方案或按F7。
16.建置完成會產生JNIHelloWorld.dll,注意檔案是產生在JNIHelloWorld Project目錄下的debug,d為小寫,不是產生在JNIHelloWorld->JNIHelloWorld->Debug;將dll複製到Netbeans的Project目錄下。
17.開Netbeans,看一下我們剛寫JNIHello.java,由於dll的檔名為JNIHelloWorld.dll,所以要將紅框處修改為JNIHelloWorld。
18.現在來建置一下看看結果是否成功,選run main project。
19.秀出Hello World!。成功囉!
轉載請註明出處,enjoy。
By SHIH-WEI 2009.11.11
http://zwe0405.blogspot.com/2009/11/jni.html
板主你好,
回覆刪除小弟目前也正在學習JNI,
如果版大有時間的話希望可以有其他範例,
因為網上太多的HELLOWORLD,
實際上使用又會遇到很多問題,
感謝。
P.S.黃色有點太亮了看不太清楚︿ ︿