JNI類型對應

一個數組int[],就須要表示爲這樣"[I"。若是多個數組double[][][]就須要表示爲這樣 "[[[D"。也就是說每個方括號開始,就表示一個數組維數。多個方框後面,就是數組 的類型。java

Java 類型android

符號c++

Boolean數組

Z函數

Bytespa

B指針

Char對象

Cci

Shorttable

S

Int

I

Long

J

Float

F

Double

D

Void

V

objects對象

以"L"開頭,以";"結尾,中間是用"/" 隔開的包及類名。好比:Ljava/lang/String;若是是嵌套類,則用$來表示嵌套。例如 "(Ljava/lang/String;Landroid/os/FileUtils$FileStatus;)Z"

 

例如:

java                                  c/c++

int[]                               [I

boolean[][]                    [[Z

void fun()                      (;)V

void fun(int)                  (I;)V

long fun(int, String)       (ILjava/lang/String;)J

int[] fun(int[])                 ([I;)I

依次類推

 

C和C++函數時的JNI使用區別

Java調用C和C++函數時的JNI使用區別:
注意:jni.h頭文件中對於*.c & *.cpp採用不一樣的定義
在C的定義中,env是一個兩級指針,而在C++的定義中,env是個一級指針
C形式須要對env指針進行雙重deferencing,並且須將env做爲第一個參數傳給jni函數

對於.c
1.jclass test_class = (
env)->GetObjectClass(env, obj);
2.jfieldID id_num = (env)->GetFieldID(env, test_class, "num", "I");
對於 .cpp 1.jclass test_class = env->GetObjectClass(obj); 2.jfieldID id_num = env->GetFieldID(test_class, "num", "I"); 在 C 中, JNI 函數調用由「(env)->」做前綴,目的是爲了取出函數指針所引用的值。 在 C++ 中, JNIEnv 類擁有處理函數指針查找的內聯成員函數。 下面將說明這個細微的差別,其中,這兩行代碼訪問同一函數,但每種語言都有各自的語法。 C 語法:jsize len = (
env)->GetArrayLength(env,array); C++ 語法:jsize len =env->GetArrayLength(array);

相關文章
相關標籤/搜索