这是从.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);
}
};