JNI Demo實現(基於IEDA,VS2008)
一、簡介:
JNI是Java Native Interface的縮寫,它提供了若干的API實現了Java和其他語言的通訊(主要是C&C++)
二、步驟概要:
- 編寫帶有native宣告的方法的java類
- 使用IDE或javac命令編譯所編寫的java類
- 使用javah + java類名生成副檔名為h的標頭檔案
- 使用C/C++實現本地方法
- 將C/C++編寫的檔案生成動態連線庫(DLL)
- ok,搞定,可以執行java程式了
三、詳細步驟:
以列印Hello world為例,已完成的工程目錄:(out是我這邊構建專案後生成的,請忽略)
第一步:編寫java程式碼:
1 public class JNIDemo { 2 //定義一個方法,該方法在C++中實現 3 public native void testHello(); 4 5 public static void main(String[] args){ 6 //載入C++檔案(dll檔案) 7 System.loadLibrary("TestJNI"); 8 JNIDemo jniDemo = new JNIDemo(); 9 jniDemo.testHello();10 } 11 }
第二步:使用IDEA對java專案進行編譯,然後進入java類JNIDemo目錄中,使用javah對生成的JNIDemo.class進行處理,生成JNIDemo.h檔案,命令如下:
javah JNIDemo
第三步:使用vs 2008編寫c++方法,如下:
1.選擇檔案-》新建-》專案
2.選擇 win32專案,輸入 名稱,然後點選確定
3.後續點選下一步進入下圖,選擇DLL,這樣就建立完成了
第四步:生成專案目錄如下:
第五步:在原始檔目錄上右鍵,建立一個類:
第六步:在你的JDK目錄的include目錄下有一個jni.h的檔案,include的win32目錄下有個jni_md.h檔案,還有java工程的中之前生成的JNIDemo.h檔案,一起拷貝到C++工程的TestJNI目錄下:
當前目錄為工程目錄:
第七步:在標頭檔案目錄上右鍵,新增剛剛複製的.h標頭檔案(jni.h、jni_md.h、JNIDemo.h)
第八步:開啟JNIDemo.h,將#include <jni.h>調整為#include "jni.h"
第九步:在TestJNI.cpp新增如下程式碼:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class JNIDemo */ #ifndef _Included_JNIDemo #define _Included_JNIDemo #ifdef __cplusplus extern "C" { #endif /* * Class: JNIDemo * Method: testHello * Signature: ()V */ JNIEXPORT void JNICALL Java_JNIDemo_testHello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
第十步:配置C++工程,在解決方案上右鍵,選擇屬性
作如下配置,如果為32位的系統則可以使用win32:
第十一步:在解決方案上右擊,生成解決方案
第十二步:在C++專案中可以看到生成的TestJNI.dll檔案,在IDEA中點選File->Project Structure...,
然後將生成的TestJNI.dll加入到Libraries中
第十三步:右鍵執行java程式,可以看到執行的結果