我试图这样做,但我没有找到任何方法。我问这个是因为我是Windows的新手。我试过stl-strings,但是visual studio 2008-在stl-wstring-handling中积累了bug。在其他问题上,我稍后会对此事说很多。现在有人可以解释这个问题吗?
答案 0 :(得分:6)
使用转化类CT2CW,例如FuncTakingLPCWSTR(CT2CW(cstring_var))
。这保证可以在Unicode或MBCS版本中使用。
另外,请记住传递给函数的字符串可能是临时的,因此请不要将其存储起来供以后使用。
答案 1 :(得分:4)
这应该这样做,假设您的应用程序尚未设置为Unicode(如果是,则直接投射):
CString str("Hello, world!");
CStringW strw(str);
LPCWSTR ptr = strw;
答案 2 :(得分:4)
最简单的方法是使用MFC字符串转换宏,定义于:
http://msdn.microsoft.com/en-us/library/87zae4a3%28VS.80%29.aspx
例如,要将CString
转换为LPCWSTR
的宏为CT2W(s)
。
另一种方法是使用专门的CStringA
和CStringW
类。这些是CString
的相应ascii和宽版本,具体取决于您是否使用UNICODE
标志进行编译。所以你可以使用:
CString your_string = "blah"
CStringW wide_string = your_string;
获取字符串的宽版本。
答案 3 :(得分:1)
如果定义了UNICODE,_UNICODE
个编译器标志,那么简单的赋值应该有效。如果您已定义_MBCS
,则需要使用MultiByteToWideChar方法。
答案 4 :(得分:1)
LPCWSTR pstr;
CString cstrTemp;
...
pstr = cstrTemp.AllocSysString();
AllocSysString将返回一个BSTR类型的字符串,可以直接转换为LPCWSTR。
答案 5 :(得分:0)
您也可以使用T2W()宏来避免编写多行MultiByteToWideChar代码。