这是从.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 *'****
应如何解决?
答案 0 :(得分:2)
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);
}
};