今天无意中看到以前写的两行代码:

//const char* p_uri = (*env)->GetStringUTFChars(env, uri, NULL);
const char* p_uri = env->GetStringUTFChars(uri, NULL);

想不起来jni中的env调用方法还有两种写法。二者当前区别可以从下面这个描述得到答案:

如果是c程序,要用 (*env)->

如果是C++要用 env->

ps: jni代码,如果.c文件中用 “env->” 编译会找不到此结构,必须用“(*env)->”,或者改成.cpp文件,以 c++的方式来编译。

以下是两者的区别:

jni.h中

struct JNINativeInterface_;

struct JNIEnv_;

#ifdef __cplusplus
typedef JNIEnv_ JNIEnv;
#else
typedef const struct JNINativeInterface_ *JNIEnv;
#endif

/*
* We use inlined functions for C++ so that programmers can write:
*
*   env->FindClass("java/lang/String")
*
* in C++ rather than:
*
*    (*env)->FindClass(env, "java/lang/String")
*
* in C.
*/

即C++中使用
env->FindClass("java/lang/String")


C中使用

(*env)->FindClass(env, "java/lang/String")

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐