JNI技術實戰

JNI是Java Native Interface的縮寫,中文爲JAVA本地調用。從Java1.1開始,Java Native Interface(JNI)標準成爲java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI一開始是爲了本地已編譯語言,尤其是C和C++而設計的,但是它並不妨礙你使用其他語言,只要調用約定受支持就可以了。
一、JNI開發程序的一般步驟
1、 編寫java中的調用類
2、 用javah生成c/c++原生函數的頭文件
3、c/c++中調用需要的其他函數功能,實現原生函數(原則上可以調用任何資源)
4、將項目依賴的所有原生庫和資源加入到java項目的java.library.path
5、生成java程序
6、發佈java應用和dll庫
二、JNI程序開發實例
1、TestHello.java
public class TestHello {
	
	static{
		System.out.print(System.getProperty("java.library.path"));
		System.loadLibrary("TestHello");
	}
	
	public static native void hello(String msg);
	
	public static void main(String[]args){
		hello("Hi, Wu Yunmin!");
	}

}

編譯生成TestHello.class文件。
2、run -> cmd,執行javah TestHello,生成TestHello.h文件;
3、打開VC6.0,新建工程TestHello

8d57e85a-9e8c-3140-b009-119e1bda6fdd.jpg
在彈出窗口選擇“一個簡單的DLL工程”

aae709d0-a125-3cc4-bd6e-d113c3a3f18f.jpg
4、打開項目所在的文件目錄,將TestHello.h文件複製到此項目文件目錄下。
5、選擇VC6.0文件目錄欄下的“FileView”選項卡,在Header Files上點擊右鍵,選擇Add Files to Folder…。選擇TestHello.h文件,點擊OK。
6、打開StdAfx.h文件,再最後面添加:
#include <jni.h>
#include "TestHello.h"

7、在TestHello.cpp中添加如下代碼:
//方法名命名規則:Java + "_" + java的類名 + "_" + java類下的方法;如:Java_TestHello_hello
JNIEXPORT void JNICALL Java_TestHello_hello(JNIEnv * env, jclass obj, jstring jMsg)
{
    const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);   
 
       MessageBox( 0, strMsgPtr,"Message box from VC++ ", 0 );
 
       env->ReleaseStringUTFChars( jMsg, strMsgPtr); 
 
}

8、在VC6.0的菜單上選擇Tools-Options…,打開選項對話框。在Directories文件夾,添加上jdk所在文件夾下的include和include\win32文件夾。
c070e9a1-45d8-3752-a08d-c5ca5bbceb79.jpg

8789edca-ffcb-3753-a2b6-8badd9b6f38f.jpg
點擊VC上的菜單項Build-Build All,生成TestHello.dll。
9、將TestHello.dll複製到TestHello.class所在的文件夾下。
10、run -> cmd,執行java TestHello
09f712cf-a918-3b33-968b-d4894538ff17.jpg
如有不對之處,請指正。

  • 8d57e85a-9e8c-3140-b009-119e1bda6fdd-thumb.jpg
  • 大小: 82 KB
  • aae709d0-a125-3cc4-bd6e-d113c3a3f18f-thumb.jpg
  • 大小: 68.5 KB
  • c070e9a1-45d8-3752-a08d-c5ca5bbceb79-thumb.jpg
  • 大小: 61.8 KB
  • 8789edca-ffcb-3753-a2b6-8badd9b6f38f-thumb.jpg
  • 大小: 34.7 KB
  • 09f712cf-a918-3b33-968b-d4894538ff17-thumb.jpg
  • 大小: 44.7 KB
發佈了98 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章