jni返回結(jié)構(gòu)體參數(shù)

jni返回結(jié)構(gòu)體參數(shù)

ID:20480008

大?。?39.66 KB

頁數(shù):15頁

時(shí)間:2018-10-13

jni返回結(jié)構(gòu)體參數(shù)_第1頁
jni返回結(jié)構(gòu)體參數(shù)_第2頁
jni返回結(jié)構(gòu)體參數(shù)_第3頁
jni返回結(jié)構(gòu)體參數(shù)_第4頁
jni返回結(jié)構(gòu)體參數(shù)_第5頁
資源描述:

《jni返回結(jié)構(gòu)體參數(shù)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、JNI返回結(jié)構(gòu)體參數(shù)如何使用JNI的一些基本方法和過程在網(wǎng)上多如牛毛,如果你對Jni不其了解,不知道Jni是做什么的,如何建立一個(gè)基本的jni程序,或許可以參考下面下面這些文章:利用VC++6.0實(shí)現(xiàn)JNI的鉍簡單的例了JNI入門教程之HelloWorld篇SUNJNITutorial這些資料的例子屮,大多數(shù)只是輸入一些簡單的參數(shù),獲取沒有參數(shù)。而在實(shí)際的使用過程屮,往往耑要對參數(shù)進(jìn)行處理轉(zhuǎn)換?才可以被C/C++程序識(shí)別?比如我們在C++屮有一個(gè)結(jié)構(gòu)(Struct)Disklnfo,需要傳遞一個(gè)類似于Disklnfo

2、*pDisklnfo的參數(shù),類似于在C++這樣參數(shù)如何傳遞到Java中呢?下面我們就來討論C++到Java屮方法的一些常見參數(shù)的轉(zhuǎn)換:定義NativeJava類:如果你4慣了使用JNI,你就不會(huì)覺得它難了。既然本地方法足由其他語言實(shí)現(xiàn)的,它們在Java屮沒有函數(shù)體。但是,所有本地代碼必須用本地關(guān)鍵詞聲明,成為Java類的成員。假設(shè)我們在C++中有這么一個(gè)結(jié)構(gòu),它用來描述硬盤信息:〕ava代碼1.//硬盤信息2.struct{3.charname[256];4.intserial;5.}DiskInfo;那么我們需要在

3、Java中定義一個(gè)類來與之匹配,聲明可以寫成這樣:]ava代碼1.classDisklnfo{2.//名字3.publicStringname;4.5.//序列號(hào)6.publicintserial;7.}在這個(gè)類中,申明一些Native的本地方法,來測試方法參數(shù)的傳遞,分別定義了一些函數(shù),用來傳遞結(jié)構(gòu)或者結(jié)構(gòu)數(shù)組,具體定義如下而代碼:Java代碼1.2.3.4.『本本//本木*氺*本本木**本木木氺本本*氺vi氺木**木氺*本*氺*本木氺**本本*氺///輸入常川的數(shù)值類型(Boolean,Byte,Char,Sho

4、rt,Int,Float,Double)publicnativevoiddisplayParms(StringshowText,inti,booleanbl);5.//調(diào)用一個(gè)靜態(tài)方法6.publicnativeintadd(inta,intb);7.7.//輸入一個(gè)數(shù)組8.publicnativevoidsetArray(boolean[]blList);10.9.//返回一個(gè)字符串?dāng)?shù)組10.publicnativeString[]getStringArray();13.11.//返回一個(gè)結(jié)構(gòu)12.publicna

5、tiveDisklnfogetStruct();16.13.//返冋一個(gè)結(jié)構(gòu)數(shù)組14.publicnativeDisklnfo[]getStructArray();編譯生成C/C++頭文件定義好了Java類之后,接下來就耍寫本地代碼。本地方法符號(hào)提供一個(gè)滿足約定的頭文件,使用Java工具Javah可以很界易地創(chuàng)建它而不用手動(dòng)去創(chuàng)建。你對Java的class文件使用javah命令,就會(huì)為你生成一個(gè)對應(yīng)的C/C++頭文件。1、在控制臺(tái)下進(jìn)入工作路徑,本工程路徑力:E:workjavaworkspaceJavaJn

6、i。2、運(yùn)行javah命令:javah-classpathE:workjavaworkspaceJavaJnicom.sundy.jnidemoChangeMethodFromJni本文生成的C/C++尖義件名為:com_sundyJnidemo_ChangeMethodFromJni.h在C/C++中實(shí)現(xiàn)本地方法生成C/C++頭文件之后,你就需耍寫頭文件對應(yīng)的本地方法。注意:所有的本地方法的第一個(gè)參數(shù)都是指向JN舊nv結(jié)構(gòu)的。這個(gè)結(jié)構(gòu)是用來調(diào)用JNI函數(shù)的。第二個(gè)參數(shù)jclass的意義,要看方法是不足靜態(tài)的

7、(static)或者實(shí)例(Instance)的。前者,jclass代表一個(gè)類對象的引用,而后者足被調(diào)用的方法所屬對象的引用。返M值和參數(shù)類型根裾等價(jià)約定映射到本地C/C++類型,如表JNI類型映射所示。有些類型,在本地代碼中可直接使用,而艽他類型只有通過JNI調(diào)用操作。表AJava類型木地類型描述booleanjbooleanC/C++8位整型bytejbyteC/C++帶符號(hào)的8位整型charjcharC/C++無符號(hào)的16位整型shortjshortC/C++帶符兮的16位整型intjintC/C++帶符號(hào)的32

8、位整型longjlongC/C++帶符號(hào)的64位整型efloatjfloatC/C++32位浮點(diǎn)型doublejdoubleC/C++64位浮點(diǎn)型Objectjobject任何Java對象,或者沒有對應(yīng)java類型的對象ClassjclassClass對象Stringjstring字符串對象Object[]jobjectArray任何對象的數(shù)組

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。