vc ++ - 如何将CString转换为LPCWSTR

时间:2011-03-11 10:00:25

标签: c++ visual-c++ mfc

我试图这样做,但我没有找到任何方法。我问这个是因为我是Windows的新手。我试过stl-strings,但是visual studio 2008-在stl-wstring-handling中积累了bug。在其他问题上,我稍后会对此事说很多。现在有人可以解释这个问题吗?

6 个答案:

答案 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)

另一种方法是使用专门的CStringACStringW类。这些是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代码。