现在的位置: 首页 > 综合 > 正文

JNI遇到error: request for member ‘FindClass’ in something not a structure or union

2018年05月16日 ⁄ 综合 ⁄ 共 721字 ⁄ 字号 评论关闭

error: request for member 'FindClass' in something not a structure or union

可能的问题是:

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

ps:在linux下如果.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")

同理,ReleaseStringUTFChars函数也有可能出现这样的问题。

come from:http://blog.csdn.net/bailyzheng/article/details/8690538

抱歉!评论已关闭.