1. ホーム
  2. Java

JNIエンカウンターエラー:構造体またはユニオンではない何かでメンバー 'FindClass' のリクエスト

2022-02-14 04:34:28

 error: 構造体またはユニオンでないものの中のメンバー 'FindClass' に対する要求

考えられる問題点は

cプログラムであれば、(*env)->を使用します。
C++の場合はenv->を使用します。
ps:Linuxでは、.cファイルが"env->"でコンパイルされると構造体が見つからないので、"(*env)->"を使うか、c++でコンパイルするために.cppファイルへ変更する必要があります。
以下はその相違点です。
jni.h内
struct JNINativeInterface_;
struct JNIEnv_;
#ifdef __cplusplus
typedef JNIEnv_ JNIEnv;
#else
typedef const struct JNINativeInterface_ *JNIEnv;
#endif
/*
* C++では、プログラマが書けるようにインライン関数を使用しています。

* env->FindClass("java/lang/String")を使用します。
*
* よりもC++で。
*
* (*env)->FindClass(env, "java/lang/String")
*
* C言語での
*/
つまり、C++では
env->FindClass("java/lang/String")を使用します。
C言語での使用
(*env)->FindClass(env, "java/lang/String")を使用します。