在使用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函数