这是从.cpp文件抛出的错误。我正在使用Visual Studio 10和Windows7 32位并从Eclipse Indigo进行编译

AUWideString(JNIEnv* jni, jstring jstr)
    : mJni(jni),
      mJString(jstr),
      mString(0)
    {
        if (jstr != 0) {
            mString = jni->GetStringChars(jstr, 0);
        }
    }

    ~AUWideString()
    {
        mJni->ReleaseStringChars(mJString, mString);
    }

    operator const wchar_t*() const
    {
        return mString;
    }
    **error C2440: '=' : cannot convert from 'const jchar *' to 'const wchar_t *'
            Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    error C2664: 'JNIEnv_::ReleaseStringChars' : cannot convert parameter 2 from 'const wchar_t *' to 'const jchar *'****

应该如何解决?

最佳答案

jchar定义为unsigned short,而不是wchar_t。但是,在Windows上,两者的大小均为16位,因此您可以在需要时使用类型转换,如第一个编译器错误所述。您还应该将mString定义为jchar*而不是wchar_t*,因为这是JNI实际使用的功能。这样可以消除第二条错误消息。

试试这个:

class AUWideString
{
private:
    JNIEnv* mJni;
    jstring mJString;
    jchar* mString;
    ...

public:
    AUWideString(JNIEnv* jni, jstring jstr)
        : mJni(jni),
          mJString(jstr),
          mString(0)
    {
        if (mJString != 0)
            mString = mJni->GetStringChars(mJString, 0);
    }

    ~AUWideString()
    {
        if ((mJString != 0) && (mString != 0))
            mJni->ReleaseStringChars(mJString, mString);
    }

    operator const wchar_t*() const
    {
        return reinterpret_cast<const wchar_t*>(mString);
    }
};

10-01 02:40