国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JNA調(diào)用C語言動(dòng)態(tài)鏈接庫學(xué)習(xí)實(shí)踐總結(jié)

2019-11-11 06:46:43
字體:
供稿:網(wǎng)友

非常感謝linux社區(qū)的zht666給我指了一條明路,本文轉(zhuǎn)載自: http://www.linuxidc.com/Linux/2014-04/99688p2.htm

2.JNA模擬普通傳值參數(shù)

C語言函數(shù):

int function1(int a, float b, long c)

JNA模擬:

int function1(int a, float b, long c)

3.JNA模擬C語言數(shù)組

C語言函數(shù):

void function1(char * data)

void function2(const unsigned char* data)

JNA模擬:

void function1(char[] data) 或者 void function1(byte[] data) void function2(char[] data) 或者 void function2(byte[] data)

4.JNA模擬基本類型指針

JNA的ByReference有很多子類,這些類都在com.sun.jna.ptr包中:

IntByReference,LongByReference,F(xiàn)loatByReference,DoubleByReference,ShortByReference、ByteByReference、PointerByReference等等

從這些名字大家應(yīng)該可以看出來他們的作用。

下面直接上例子吧:

C語言函數(shù):

long function(int * a, long * b, float * c, double * d, short * e)

JNA模擬:

long function(IntByReference aRef, LongByReference bRef, FloatByReference cRef, DoubleByReference dRef, ShortByReference eRef)

如何構(gòu)建這些對(duì)象呢?

FloatByReference cRef = new FloatByReference(); //使用默認(rèn)初始值(具體多少我也不知道) FloatByReference cRef = new FloatByReference(0); //初始值為0

調(diào)用方法和普通參數(shù)一樣:

function(…, cRef, …);

獲取結(jié)果值:

float fVal = cRef.getValue();

JNA都為我們做的很簡(jiǎn)單,不是嗎?

5.JNA模擬指針、指針的指針、模擬void ,void 等指針*

C函數(shù):

void function(int * pInt, int * ppInt, void pVoid, void ** ppVoid)

JNA模擬:

void function(IntByReference pInt, PointerByReference ppInt, Pointer pVoid, PointerByReference ppVoid) 調(diào)用舉例: IntByReference pInt = new IntByReference(0); PointerByReference ppInt = new PointerByReference(Pointer.NULL); //指向指針的指針,初始化為NULL Pointer pVoid = Pointer.NULL; //創(chuàng)建一個(gè)指向NULL的指針 PointerByReference ppVoid = new PointerByReference(Pointer.NULL); 調(diào)用:function(pInt, ppInt, pVoid, ppVoid);

(1)PointerByReference是指向指針的指針,遇到指針的指針都可以使用它來模擬,那么如何獲取到它指向的指針呢?

Pointer p = ppVoid.getValue(); //獲取指針

(2)如何獲取指針的指針呢?

Pointer p1 = ….; PointerByReference pp1 = new PointerByReference(p1); PointerByReference ppp1 = new PointerByReference(pp1.getPointer());

這些操作大家可以自己做實(shí)驗(yàn)嘗試,對(duì)于PointerByReference對(duì)象,getValue()是取值,而getPointer()是取這個(gè)指針的指針。

看著復(fù)雜,其實(shí)都很簡(jiǎn)單!JNA要比JNI好用多了。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁武县| 江阴市| 礼泉县| 东莞市| 增城市| 和林格尔县| 祁东县| 武陟县| 贵定县| 海门市| 磐石市| 禄劝| 青海省| 琼结县| 明光市| 香港 | 得荣县| 资溪县| 辽宁省| 麻江县| 浦东新区| 靖边县| 青州市| 安宁市| 新津县| 太仓市| 高州市| 宁陵县| 南昌市| 深州市| 普陀区| 抚顺市| 镇巴县| 南澳县| 海兴县| 弥渡县| 巩留县| 库伦旗| 蒙城县| 宁武县| 内黄县|