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

jchar被定义为unsigned short,不是wchar_t。但是,在 Windows 上,两者都是 16 位大小,因此您可以在需要时使用类型转换,正如第一个编译器错误所说。您还应该将其定义mString为 ajchar*而不是 a,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);
    }
};
于 2012-12-18T05:57:23.923 回答