1. 程式人生 > >JNI Demo實現(基於IEDA,VS2008)

JNI Demo實現(基於IEDA,VS2008)

 

一、簡介:

  JNI是Java Native Interface的縮寫,它提供了若干的API實現了Java和其他語言的通訊(主要是C&C++

二、步驟概要:

  1. 編寫帶有native宣告的方法的java類
  2. 使用IDE或javac命令編譯所編寫的java類
  3. 使用javah + java類名生成副檔名為h的標頭檔案
  4. 使用C/C++實現本地方法
  5. 將C/C++編寫的檔案生成動態連線庫(DLL)
  6. 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程式,可以看到執行的結果