1. 程式人生 > >JNI中在被呼叫的C/C++函式中如何訪問Java程式中的類,並編寫應用例項

JNI中在被呼叫的C/C++函式中如何訪問Java程式中的類,並編寫應用例項

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工具獲得屬性和方法的簽名。