1. 程式人生 > >JNI原生函式中JNIEnv引數詳解

JNI原生函式中JNIEnv引數詳解

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介面指標不能被快取以及被其他執行緒使用**