JNI原生函式中JNIEnv引數詳解
阿新 • • 發佈:2019-01-05
JNIEXPORT jstring JNICALL
Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv *env,jobject thiz)
原生程式碼通過JNIEnv介面指標提供的各種函式來使用虛擬機器的功能。JNIEnv是一個
指向執行緒-區域性資料的指標,而執行緒-區域性資料中包含指向函式表的指標。實現原生方法的函式 將JNIEnv介面指標作為它們的第一個引數。
原生程式碼是C和原生程式碼是C++其呼叫JNI函式的語法不同.C程式碼中,JNIEnv是指向JNINativeInterface 結構的指標,為了訪問任何一個JNI函式,該指標需要首先被解引用。因為C程式碼中的JNI函式不瞭解 當前的JNI環境,JNIEnv例項應該作為第一個引數傳遞給每一個JNI函式的呼叫者,比如 `return (*env)->NewStringUTF(env,"Hello from JNI")` 在C++程式碼中,JNIEnv實際上是C++類例項,JNI函式以成員函式的形式存在。因為 JNI已經訪問了當前的JNI環境,因此,JNI方法呼叫不要求JNIEnv例項做引數。在C++ 中完成同樣功能其呼叫程式碼格式為: `return++ env->NewStringUTF("Hello from JNI");` **JNIEnv介面指標不能被快取以及被其他執行緒使用**