在BCB6.0工程向BCB2009及以上版本移植中,会出现各种各样的问题。如类型转换错误、不匹配,方法找不到等等....
终究原因为:在BCB6中默认字符串为AnsiString,但是在2009及以上版本中,默认为UnicodeString.
1、提示没有Tserversocket
解决办法:默认情况下TClientSocket、TServerSocket这两个控件是没有安装到控件面板上,需要手动安装:
Component-->Install packages-->Add
找到$(BDS)\Bin\dclsockets140.bpl,这个文件,点击"OK"。
在INTERNET组件组中出现这两个控件。
2、 Cannot convert 'wchar_t *' to 'const char *'
解决办法:将.c_str()方法替换成.t_str() ,或者将字符串先转换成AnsiString,再调用c_str()方法: AnsiString(str).c_str().
3、Cannot convert 'const char *' to 'const wchar_t *'
字符串前面加L,例如:L"hello"。“L”意思
就是wide char的意思。 平时用的ASCII,一个字符占一个字节。 UNICODE用宽字符,一个字符占两个字节。 例如:单字符,char* str = "hello"; 宽字节,wchar_t* wStr = L"hello"。
3、 'AnsiCompareIC' is not a member of 'UnicodeString'
解决办法:AnsiCompareIC改成 CompareIC,或者改用SameText(str1,str2)方法
此类问题,注意将AnsiString的方法改成UnicodeString中的方法
4、UnicodeString 转UTF8,解决中文乱码问题
RawByteString strRaw;
UnicodeString ustr="你好";
strRaw=UTF8Encode(ustr);