无意中发现下面四种转换方法,总结如下:
方法一:
CString strData;
int nWDataLen=::MultiByteToWideChar(CP_ACP, NULL, (LPCSTR)(LPCTSTR)strData,nDataLen, NULL, 0);
pwszData=new wchar_t[nWDataLen];
::MultiByteToWideChar(CP_ACP, NULL, (LPCSTR)(LPCTSTR)strData, nDataLen, pwszData, nWDataLen);
方法二:
pwszData=_com_util::ConvertStringToBSTR((LPCSTR)(LPCTSTR)strData);
...
//用完释放
SysFreeString(pwszData);
方法三:
bstr_t bsData = (LPCSTR)m_strData;
pwszData = bsData;
方法四:
uses_conversion;
pwszData = A2W((LPCSTR)m_strData);
其实以上四种方法本质都一样,最终都是调用api MultiByteToWideChar来实现的, bstr_t类是BSTR类型的封装类,BSTR就是unicode的字符串。
typedef LPWSTR BSTR;
方法三的优点是内存自动释放,无需程序员关心,推荐使用。
方法四用堆栈作为临时转换空间,因此不适合太大字符串的转换。