在使用JNI调用C和C++函数时,使用的形式不同:
1 |
//
C++中使用: |
2 |
3 |
jbyte
*arr = env-> GetByteArrayElements(jarr, 0); |
1 |
//
C中使用: |
2 |
3 |
jbyte
* arr = (*env)-> GetByteArrayElements(env,jarr, 0); |
因为在jni.h中有定义:
1 |
//
jni.h |
2 |
const jchar *(JNICALL *GetStringChars) |
3 |
(JNIEnv *env, jstring str, jboolean *isCopy); |
4 |
5 |
#ifdef __cplusplus |
6 |
7 |
const jchar *GetStringChars(jstring str, jboolean *isCopy) { |
8 |
return functions->GetStringChars( this ,str,isCopy); |
9 |
} |
如果想使用(*env)必须去掉__cplusplus这个宏。
在C的定义中,env是一个两级指针,而在C++的定义中,env是个一级指针
C形式需要对env指针进行双重deferencing,而且须将env作为第一个参数传给jni函数