亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何動態注冊native函數

發布時間:2021-10-14 14:47:23 來源:億速云 閱讀:93 作者:柒染 欄目:編程語言

本篇文章為大家展示了如何動態注冊native函數,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Java JNI是一種靜態注冊native函數的方式。它的缺點是對每一個聲明有native函數的java都需要生成.h,然后再做成鏈接庫。相對繁瑣。

其實java native函數和JNI函數的一一對應關系可以理解為函數和函數指針的關系,因此可以存在一種動態注冊的方式注冊函數。

Andoird 中使用了一種JNINativeMethod結構體還存放這種關聯關系,即Andorid使用了一種Java 和 C 函數的映射表數組,并在其中描述了函數的參數和返回值。這個數組的類型是JNINativeMethod,定義如下:

typedef struct {
const char* name;         // native函數名稱
const char* signature;  // native函數簽名,主要包括函數參數類型和返回值
void*fnPtr;                       //函數指針,用于創建關聯關系
} JNINativeMethod;

第一個變量name是Java中函數的名字。

第二個變量signature,用字符串是描述了函數的參數和返回值

第三個變量fnPtr是函數指針,指向C函數。

其中比較難以理解的是第二個參數,例如

"()V"

"(II)V"

"(Ljava/lang/String;Ljava/lang/String;)V"

實際上這些字符是與函數的參數類型一一對應的。

"()" 中的字符表示參數,后面的則代表返回值。例如"()V" 就表示void Func();

"(II)V" 表示 void Func(int, int);

具體的每一個字符的對應關系如下

字符Java類型C類型

V     void           void
Z      jboolean    boolean
I       jint              int
J       jlong           long
D     jdouble      double
F     jfloat           float
B     jbyte           byte
C     jchar          char
S     jshort         short

數組則以"["開始,用兩個字符表示

[I      jintArray     int[]
[F    jfloatArray   float[]
[B    jbyteArray   byte[]
[C   jcharArray   char[]
[S   jshortArray  short[]
[D   jdoubleArraydouble[]
[J    jlongArray    long[]
[Z   jbooleanArrayboolean[]

上面的都是基本類型。如果Java函數的參數是class,則以"L"開頭,以";"結尾中間是用"/" 隔開的包及類名。而其對應的C函數名的參數則為jobject. 一個例外是String類,其對應的類為jstring

Ljava/lang/String;Stringjstring
Ljava/net/Socket;Socketjobject

如果JAVA函數位于一個嵌入類,則用$作為類名間的分隔符。

例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

上述內容就是如何動態注冊native函數,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

炉霍县| 双柏县| 德格县| 瑞昌市| 疏附县| 子洲县| 蓬溪县| 顺昌县| 枣强县| 富民县| 武穴市| 桐庐县| 平塘县| 长治市| 临武县| 鲜城| 吴川市| 阿图什市| 富阳市| 揭西县| 龙山县| 丰台区| 大同县| 万安县| 连城县| 阳谷县| 合作市| 深泽县| 澳门| 皋兰县| 明溪县| 浮梁县| 安陆市| 龙泉市| 曲周县| 蓬安县| 建始县| 阿图什市| 玉溪市| 怀安县| 城口县|