2013-05-27 42 views
0

IM試圖建立C++與NDK,構建代碼,但我一直只是心不是收到此錯誤base operand of '->' has non-pointer type 'JNIEnv <aka _JNIEnv>'與C++指針錯誤和NDK

我已經嘗試了前2頁的谷歌沒有運氣每一個解決方案,將NDK對我很好。

nativemain.h

#ifndef NATIVEMAIN_H 
#define NATIVEMAIN_H 

#include <string.h> 
#include <jni.h> 

extern "C" 
{ 

JNIEXPORT jstring JNICALL Java_com_ndktest3_MyRenderer_stringFromJNI(JNIEnv* env, 
                jobject thiz); 
} 

#endif 

nativemain.cpp

#include <nativemain.h> 


JNIEXPORT jstring JNICALL Java_com_ndktest3_MyRenderer_stringFromJNI(JNIEnv* env, 
                jobject thiz) 
{ 
    return env->NewStringUTF("Hello from JNI !"); 
} 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := nativemain 
LOCAL_SRC_FILES := nativemain.cpp 

include $(BUILD_SHARED_LIBRARY) 
+0

更多鈔票複製:http://stackoverflow.com/questions/15764948/error-base-operand-of-has-non-pointer-type-jnienv – chr

+0

沒有必要以後門適度。我已經嘗試瞭解決方案,因爲你可以看到,如果你會看看代碼 – DevGuy

+0

道歉沒有注意和抱歉,它沒有幫助。 – chr

回答

0

試着改變你的語法略有

我相信錯誤是小姐-用於 在 ' - >' 操作

{ 
    return env->NewStringUTF("Hello from JNI !"); 
} 

嘗試鑄造ENV爲指針像這樣

{ 
    return (*env)->NewStringUTF(env, str); 
} 

其中str是一個預定義的字符串,如您的hello消息。
檢查這篇文章作爲一個交叉引用:Do I need to clean up the char* passed to NewStringUTF?

+0

這實際上是解除引用而不是鑄造。 'env'是一個指向結構指針的指針,而' - >'運算符需要一個指向結構體的指針,所以我們必須在使用剩餘指針指向結構體的' - >'之前解引用外部指針。 –