標籤:
1. 接下來我們細講分析一下前面一講中,c功能實現的代碼:
(1)hello.c :
1 #include <jni.h> 2 3 char* getHello() 4 { 5 //////// 6 return "hello Android From C"; 7 } 8 9 10 //jni協議給java調用11 // 傳回型別 方法名(Java_包名(使用"_"把包名分割)_類名_方法名 (參數)12 13 //JNIEnv* env jni的結構體資料,jni系統實現 ; obj java對象 調用該jni方法的對象14 jstring Java_com_himi_helloworld_MainActivity_getHelloFromC(JNIEnv* env, jobject obj)15 {16 char* res = getHello();//擷取到C代碼字串結果17 /**18 * (**env).GetVersion(env);19 * (*env)->GetVerison(env);20 */21 //jstring (*NewStringUTF)(JNIEnv*, const chat*);22 jstring jres = (**env).NewStringUTF(env,res);23 24 return jres;25 }
• jstring :資料類型就是 void*(指向一個空地區,初始化的指標)
在jni.h檔案下:
typedef void* jobject;
typedef jobject jclass;
typedef jobject jstring;
• JNIEnv* env :
JNINativeInterface struct :說明JNINativeInterface是個結構體
typedef const struct JNINativeInterface* JNIEnv; :說明JNIEnv是個結構體指標(這個結構體就是JNINativeInterface)
這個時候JNIEnv* env等價於:
JNINativeInterface** env; :也就是env定義為結構體指標的指標(雙重指標)
如果想利用env訪問JNINativeInterface結構體的成員NewStringUTF(只不過這裡的NewStringUTF是一個函數指標)。
(**env).NewStringUTF(JNIEnv*, const char*);
Android(java)學習筆記258:JNI之hello.c(c代碼功能實現)指標文法解析