vc++ - 如何将 CString 转换为 LPCWSTR
我尝试这样做,但没有找到任何方法。我问这个是因为我是 Windows 新手。我尝试了 stl-strings,但 Visual Studio 2008 在 stl-wstring-handling 中积累了错误。稍后我会在其他问题中详细讨论这件事。现在有人可以阐明这个问题吗?
I tried to do this , but I didn't find any method for this. I am asking this due to the fact that I am new to windows. I tried stl-strings, but visual studio 2008- accumulates bugs in stl-wstring-handling. I will say a lot about that thing later, in other question. Now Can anybody shed light on this issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
最简单的方法是使用 MFC 字符串转换宏,定义于:
https://learn.microsoft.com/en-us/cpp/atl/reference/string-conversion-macros?view=msvc-160
例如,宏将
CString
转换为LPCWSTR
是CT2W(s)
。另一种方法是使用专门的
CStringA
和CStringW
类。这些是CString
相应的 ascii 和 Wide 版本,具体取决于您是否使用UNICODE
标志进行编译。所以你可以使用:来获取字符串的宽版本。
The easiest way is to use the MFC String Conversion Macros, defined at:
https://learn.microsoft.com/en-us/cpp/atl/reference/string-conversion-macros?view=msvc-160
For example, the macro to convert
CString
toLPCWSTR
isCT2W(s)
.Another way is to use the specialized
CStringA
andCStringW
classes. These are the corresponding ascii and wide versions ofCString
depending on if you're compile with theUNICODE
flag. So you can use:to get a wide version of your string.
假设您的应用程序尚未设置为 Unicode(如果是,则直接转换),这应该可以做到:
This should do it, assuming your application isn't already set to Unicode (if it is, just cast directly):
使用转换类 CT2CW,如下所示
FuncTakingLPCWSTR(CT2CW(cstring_var))
。这保证可以在 Unicode 或 MBCS 版本中工作。另外,请记住,传递给函数的字符串可能是临时的,因此不要存储它以供以后使用。
Use the conversion class CT2CW like this
FuncTakingLPCWSTR(CT2CW(cstring_var))
. This is guaranteed to work in either Unicode or MBCS builds.Also, keep in mind that the string passed to the function may be a temporary, so don't store it for later use.
AllocSysString会返回一个BSTR类型的字符串,可以直接转换为LPCWSTR。
AllocSysString will return a BSTR type string, that can be converted to LPCWSTR directly.
如果您定义了
UNICODE,_UNICODE
编译器标志,那么简单的赋值应该可以工作。如果您定义了_MBCS
,则需要使用 MultiByteToWideChar 方法。If you have
UNICODE,_UNICODE
compiler flags defined then a simple assignment should work. If you have_MBCS
defined you need to use MultiByteToWideChar method.您还可以使用 T2W() 宏来避免编写多行 MultiByteToWideChar 代码。
You can also use T2W() macro to avoid writing several lines of MultiByteToWideChar code.