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

发布于 2024-10-21 06:39:45 字数 145 浏览 1 评论 0原文

我尝试这样做,但没有找到任何方法。我问这个是因为我是 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

想念有你 2024-10-28 06:39:45

最简单的方法是使用 MFC 字符串转换宏,定义于:

https://learn.microsoft.com/en-us/cpp/atl/reference/string-conversion-macros?view=msvc-160

例如,宏将CString 转换为LPCWSTRCT2W(s)

另一种方法是使用专门的 CStringACStringW 类。这些是 CString 相应的 ascii 和 Wide 版本,具体取决于您是否使用 UNICODE 标志进行编译。所以你可以使用:

CString your_string = "blah"
CStringW wide_string = your_string;

来获取字符串的宽版本。

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 to LPCWSTR is CT2W(s).

Another way is to use the specialized CStringA and CStringW classes. These are the corresponding ascii and wide versions of CString depending on if you're compile with the UNICODE flag. So you can use:

CString your_string = "blah"
CStringW wide_string = your_string;

to get a wide version of your string.

叹沉浮 2024-10-28 06:39:45

假设您的应用程序尚未设置为 Unicode(如果是,则直接转换),这应该可以做到:

CString str("Hello, world!");
CStringW strw(str);
LPCWSTR ptr = strw;

This should do it, assuming your application isn't already set to Unicode (if it is, just cast directly):

CString str("Hello, world!");
CStringW strw(str);
LPCWSTR ptr = strw;
笨笨の傻瓜 2024-10-28 06:39:45

使用转换类 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.

一口甜 2024-10-28 06:39:45
LPCWSTR pstr;
CString cstrTemp;

...

pstr = cstrTemp.AllocSysString();

AllocSysString会返回一个BSTR类型的字符串,可以直接转换为LPCWSTR。

LPCWSTR pstr;
CString cstrTemp;

...

pstr = cstrTemp.AllocSysString();

AllocSysString will return a BSTR type string, that can be converted to LPCWSTR directly.

本王不退位尔等都是臣 2024-10-28 06:39:45

如果您定义了 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.

停顿的约定 2024-10-28 06:39:45

您还可以使用 T2W() 宏来避免编写多行 MultiByteToWideChar 代码。

You can also use T2W() macro to avoid writing several lines of MultiByteToWideChar code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文