转载:http://bbs.csdn.net/topics/100075810 八楼的答案
如果你使用VC2002(2003更好)或以上的话,CString转WCHAR简单的很:
1,假设你的程序是MBCS编译,并且不打算兼容UNICODE的话,那么:
{
USES_CONVERSION;
CString sText = "text string";
WCHAR wszWideString[N];
wcscpy(wszWideString, CA2CW(sText));
}
2,假设你的程序是UNICODE编译,或者MBCS、UNICODE兼容的话,那么:
{
USES_CONVERSION;
CString sText = _T("text string");
WCHAR wszWideString[N];
wcscpy(wszWideString, CT2CW(sText));
}
所以,你应该到MSDN里查询如下关键字即可:
1, USES_CONVERSION
2, CA2CW (会看到一族 X2X 函数)
VC2002里的这族函数在类型转换上有些缺陷,但是调用时自行强制后就没问题了,2003里彻底没有缺陷了。
这些要归功于升级改版后的ATL。
最后,这些函数归根到底是基于API MultiByteToWideChar/WideCharToMultiByte的,在Windows中是需要安装有相应的码表才能正确转换的。
比如说,你的程序是MBCS编译的,你的 CHAR[] 字符串里的中文是GB2312编码的,在纯英文Windows下(纯英文是指没有安装中文码表时),CA2CW()或MultiByteToWideChar()是都不能正确转换的!
所以说,如果你只是被迫需要兼容一些第三方API调用,可以使用一下上述转换方法。但是对于跟语言文字、字符串息息相关的程序模块来说,要想走向世界,一定要用UNICODE编译!