好的一種Java程序調(diào)用C-C++語(yǔ)言函數(shù)的方法_第1頁(yè)
好的一種Java程序調(diào)用C-C++語(yǔ)言函數(shù)的方法_第2頁(yè)
好的一種Java程序調(diào)用C-C++語(yǔ)言函數(shù)的方法_第3頁(yè)
好的一種Java程序調(diào)用C-C++語(yǔ)言函數(shù)的方法_第4頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 好的一種Java程序調(diào)用C/C+語(yǔ)言函數(shù)的方法摘要本文介紹如何利用java提供的c語(yǔ)言接口在java中調(diào)用c函數(shù),解決了在實(shí)際調(diào)用過(guò)程中可能碰到的技術(shù)問(wèn)題,并通過(guò)實(shí)例給出了具體編程方法。 關(guān)鍵詞java jnt c dll 在現(xiàn)今的軟件開(kāi)發(fā)領(lǐng)域中,java以其跨平臺(tái)的優(yōu)勢(shì)得到大量的應(yīng)用,其代碼可以一次編譯多處執(zhí)行。但這種特性給java帶來(lái)了一定的局限性,幸好java提供了完備的c/c+語(yǔ)言接口,這樣我們可以利用c語(yǔ)言的強(qiáng)大功能實(shí)現(xiàn)java難以實(shí)現(xiàn)的功能,在一定程序上消除java的局限性和低效率。 一、創(chuàng)建dll文件 使用某一種c/c+開(kāi)發(fā)工具創(chuàng)建dll文件,實(shí)現(xiàn)某一功能,供java調(diào)用,例如

2、本文在此使用visual studio 2005創(chuàng)建一個(gè)名為testdll的動(dòng)態(tài)庫(kù)文件。 二、使用jni jni是java native interface的縮寫(xiě),中文為java本地調(diào)用。它允許java代碼和其他語(yǔ)言寫(xiě)的代碼進(jìn)行交互。 類(lèi) 在java程序中,首先需要在類(lèi)中聲明所調(diào)用的庫(kù)名稱(chēng),如下: static (“testdll”); /加載動(dòng)態(tài)庫(kù),testdll為dll文件名稱(chēng) 還需要對(duì)將要調(diào)用的方法做本地聲明,關(guān)鍵字為native。并且只需要聲明,而不需要具體實(shí)現(xiàn)。如下: public native static void set(int i); public native static

3、 int get(); 然后編譯該java程序文件,生成class,再用javah命令,jni就會(huì)生成c/c+的頭文件。LocALhOSt 例如程序,內(nèi)容為: public class testdll static (“testdll”); public native static int get(); public native static void set(int i); public static void main(string args) testdll test = new testdll(); (10); (); 用javac 編譯它,會(huì)生成。 再用javah testdll,

4、則會(huì)在當(dāng)前目錄下生成文件,這個(gè)文件需要被c/c+程序調(diào)用來(lái)生成所需的庫(kù)文件。 /c+ 創(chuàng)建c/c+項(xiàng)目需要增加的頭文件有、jni_這兩個(gè)文件是jni中必須的;還有就是增加。 對(duì)于已生成的.h頭文件,c/c+所需要做的,就是把它的各個(gè)方法具體的實(shí)現(xiàn)。然后編譯連接成庫(kù)文件即可。再把庫(kù)文件拷貝到j(luò)ava程序的路徑下面,就可以用java調(diào)用c/c+所實(shí)現(xiàn)的功能了。 接上例子。我們先看一下文件的內(nèi)容: #include #ifndef _included_testdll #define _included_testdll #ifdef _cplusplus extern “c” #endif jniex

5、port jint jnicall java_testdll_get (jnienv *, jclass); jniexport void jnicall java_testdll_set (jnienv *, jclass, jint); #ifdef _cplusplus #endif #endif 在具體實(shí)現(xiàn)的時(shí)候,我們只關(guān)心兩個(gè)函數(shù)原型 jniexport jint jnicall java_testdll_get (jnienv *, jclass);和 jniexport void jnicall java_testdll_set (jnienv *, jclass, jint);

6、這里jniexport和jnicall都是jni的關(guān)鍵字,表示此函數(shù)是要被jni調(diào)用的。而jint是以jni為中介使java的int類(lèi)型與本地的int溝通的一種類(lèi)型,我們可以視而不見(jiàn),就當(dāng)做int使用。函數(shù)的名稱(chēng)是java_再加上java程序的package路徑再加函數(shù)名組成的。參數(shù)中,我們也只需要關(guān)心在java程序中存在的參數(shù),至于jnienv*和jclass我們一般沒(méi)有必要去碰它。 下面我們用文件具體實(shí)現(xiàn)這兩個(gè)函數(shù):#include “ int i = 0; jniexport jint jnicall java_testdll_get (jnienv *, jclass) return i; jniexport void jnicall java_testdll_set (jnienv *, jclass, jint j) i = j+5; 編譯連接成庫(kù)文件,這里就是。把拷貝到的目錄下,java testdll運(yùn)行它,就可以觀察到結(jié)果了。 三、總結(jié) 使用jni可以在java中調(diào)用其它語(yǔ)言編寫(xiě)的代碼,在一定程度上消除java的局限性和低效率。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論