JNI中在被呼叫的C/C++函式中如何訪問Java程式中的類,並編寫應用例項
阿新 • • 發佈:2019-01-25
1、在javah工具生成的C/C++函式宣告中的JNIEnv型別引數和jobject型別引數的介紹
JNIEXPORT void JNICALL Java_jni_TestNative_sayhello(JNIEnv * env, jobject object);
JNIEnv 這個型別實際上代表java環境,這個指標JNIEnv* env可以對java程式碼進行操作。例如建立物件,獲取物件的屬性,獲取物件的方法。同時JNIENV這個指標會被JNI傳入到本地方法的實現函式中實現對java端程式碼的操作。
jobject 如果函式式靜態方法,則object 代表java類.class物件。如果當前的方法是非靜態的,object代表當前類的物件的例項。
2、Java型別在C/C++中的對映關係
我們可以檢視jni.h標頭檔案,查詢相應的型別
3、jclass型別的含義及取得
jclass型別來表示java中的Class類
JNIEnv 類中獲取jclass的幾個函式:
jclass FindClass(const char* clsName);
jclass GetObjectClass(jobject obj);
jclass getSuperClass(jclass obj);
FIndClass 會在classpath環境下尋找類
jclass cls_string=env->FindClass("java/lang/String");
訪問Java類中的屬性與方法
5、以及使用javap工具獲得屬性和方法的簽名。