あなたは間接参照する必要があり、あなたの"JavaVMポインタへのポインタ"。
これは動作します:あなたがCを使用しているので
(*state->activity->vm)->AttachCurrentThread(...);
あなたはまたのJavaVMへのポインタを渡す必要があるため、関数のシグネチャも異なるだろう。
はこれを試してください:あなたがC、およびないC++から呼び出しているよう
JavaVM *vm = state->activity->vm;
(*vm)->AttachCurrentThread(vm, &env, NULL);
に見えます。 この場合、JNIInvokeInterfaceポインターへのJavaVMのtypedefがあります。
ここでは、そのタイプのヘッダーの定義(jni.h中)Cコンパイラを使用して
struct _JavaVM;
typedef const struct JNINativeInterface* C_JNIEnv;
#if defined(__cplusplus)
typedef _JNIEnv JNIEnv;
typedef _JavaVM JavaVM;
#else
typedef const struct JNINativeInterface* JNIEnv;
typedef const struct JNIInvokeInterface* JavaVM;
#endif
だ、あなたはあなたの説明エラーの原因となっているポインタへのポインタで関数を呼び出している:「ではない構造または組合 "と呼ばれる。
しかし、あなたの使用例はC++コンパイラのためのもので、ヘッダー定義でわかるように、代わりにstructにtypedefされています。
Cの使用法はC++とは少し異なります
余分な逆参照は機能しますが、私はそれに気付きませんでした。ありがとう! –