怎樣能在Java中調用C語言生成的DLL文件

發表于:2007-06-10來源:作者:點擊數: 標簽:
以下這個例子實現的是通過調用C寫的DLL,計算字符串長度。 一、 生成C的頭文件 1. 編輯Main. java 2. 生成頭文件 按win + r打開“運行”窗口,輸入“cmd”,打開DOS控制臺窗口。進入上面Main.java所在的目錄中,輸入: javac Main.java javah Main 兩條命令

 

 

 

 

 

 

 

 

以下這個例子實現的是通過調用C寫的DLL,計算字符串長度。

一、 生成C的頭文件

1. 編輯Main.java

2. 生成頭文件

按win + r打開“運行”窗口,輸入“cmd”,打開DOS控制臺窗口。進入上面Main.java所在的目錄中,輸入:

javac Main.java

javah Main

兩條命令完成后會生成Main.h文件

二、 生成DLL

1. 新建空工程

在VS中新建工程:Win32 Console Application,取名“MakeDLL”,選擇空工程。新建后修改工程屬性:

(1) General中,將“Configuration Type”改為“Dynamic Library (.dll)”;

(2) C/C++的General中,將“Additional Include Directories”添加兩項:

“C:Program FilesJavajdk1.5.0_06include”

“C:Program FilesJavajdk1.5.0_06includewin32”

根據你安裝的JAVA路徑而設置,這是因為在C/C++編譯過程中要使用JAVA的jni.h等文件

2. 將上面生成的Main.h添加入工程

3. 新建一個新的文件main.cpp,代碼如下:

4. 按F7編譯鏈接,生成MakeDLL.dll文件

三、 JAVA調用DLL

在JAVA中使用上面生成的DLL文件:

1. 將MakeDLL.dll復制到與使用DLL的JAVA文件相同的目錄下。

2. JAVA文件的源代碼:

總結:

另外,JAVA與DLL函數的參數傳遞過程,像int類型的,可以直接從JNI函數參數列表中獲??;而數組元素則要通過JNIEnv來獲?。?

jbyte *buffer = (*env).GetByteArrayElements(str, 0); // str是參數列表中jbyteArray變量

同理可以獲取char[]的元素。

函數返回時,可以直接用return語句返回。也可以設置參數列表中的變量指針來返回:

(*env).SetByteArrayRegion(byteArray, 0, 128, byteArr);

byteArray是參數列表中的jbyteArray變量,作為指針用來返回需要返回的信息;byteArr是jbyte*類型,里面存放的值是要返回的內容。

其它的信息可以從Google或Baidu中通過查找“jni”或“java調用DLL”來查閱到。

(T007)





原文轉自:http://www.anti-gravitydesign.com

評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97