Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF
生活随笔
收集整理的這篇文章主要介紹了
Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
JNIEnv是指向可用JNI函數表的接口指針,原生代碼通過JNIEnv接口指針提供的各種函數來使用虛擬機的功能。JNIEnv是一個指向線程-局部數據的指針,而線程-局部數據中包含指向線程表的指針。實現原生方法的函數將JNIEnv接口指針作為它們的第一個參數。
原生代碼是C以及原生代碼是C++其調用JNI函數的語法不同,C代碼中,JNIEnv是指向JNINativeInterface結構的指針,為了訪問任何一個JNI函數,該指針需要首先被解引用。因為C代碼中的JNI函數不了解當前的JNI環境,JNIEnv實例應該作為第一個參數傳遞給每一個JNI函數調用者。
?
?
?
jstring Java_com_example_jni_MainActivity_stringFromC(JNIEnv* env,jobject thiz){return (*env)->NewStringUTF(env,"hello, I am from C"); }?
然而,在C++代碼中,JNIEnv實際上是C++類實例,JNI函數以成員函數形式存在,因為JNI方法已經訪問了當前的JNI環境,因此JNI方法調用不要求JNIEnv實例作參數,在C++中,完成同樣的功能代碼應該是下面這樣:
?
?
?
?
extern "C" jstring Java_com_example_jni_MainActivity_stringFromCpp(JNIEnv* env,jobject thiz){return env->NewStringUTF("hello, I am from C++"); }?
?
?
總結
以上是生活随笔為你收集整理的Android之ndk中JNIENV env->NewStringUTF (*env)->NewStringUTF的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之JNI动态注册nativ
- 下一篇: Android之在Activity中动态