3

これは、.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 *'****

これはどのように解決されるべきですか?

4

1 に答える 1

2

jcharunsigned shortとしてではなく、として定義されwchar_tます。ただし、Windowsでは、どちらも16ビットサイズであるため、最初のコンパイラエラーが示すように、必要に応じて型キャストを使用できます。また、JNIが実際に機能するので、ではなくmStringとして定義する必要があります。これにより、2番目のエラーメッセージが表示されなくなります。jchar*wchar_t*

これを試して:

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);
    }
};
于 2012-12-18T05:57:23.923 に答える