如何将 CStringW 转换为 LPCWSTR? [复制]

Posted

技术标签:

【中文标题】如何将 CStringW 转换为 LPCWSTR? [复制]【英文标题】:How to convert a CStringW into LPCWSTR? [duplicate] 【发布时间】:2016-06-03 07:10:26 【问题描述】:

我有一个使用 CStringW 从 .rc 文件中检索资源的函数。 我想在sprintf_s中使用这个返回值,有什么办法吗?

//片段

sprintf_s(szMsgBoxText, LoadFromResource(IDS_INSTALLATION_COMPLETE),  g_szProductName);


CStringW LoadFromResource(int ID)

    CStringW m_resoucestring(MAKEINTRESOURCE(ID));
    return m_resoucestring;

sprintf_s 给我一个错误。有什么替代方法吗?

【问题讨论】:

@MSalters:建议的副本不是。它要求在 ANSI 和 Unicode 字符串之间进行 转换。这个问题询问如何将 Unicode CStringW 转换为指向其内部宽字符缓冲区的指针。不涉及任何转化。 【参考方案1】:

使用与sprintf_s 完全相同的CStringW::Format。所以你的代码会变成:

CStringW sText;
sText.Format(LoadFromResource(IDS_INSTALLATION_COMPLETE), g_szProductName);

甚至

CStringW sText;
sText.Format(IDS_INSTALLATION_COMPLETE, g_szProductName);

您可以将CStringW 直接传递给任何接受LPCWSTR 类型参数的函数,因为它具有相应的强制转换运算符。

【讨论】:

以上是关于如何将 CStringW 转换为 LPCWSTR? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

error C2664: “CreateFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”

将字符串转换为 LPCWSTR 以用于 CreateFile() 以寻址串行端口

LPCWSTR 和char数组的转换

C++,有没有可以将LPCWSTR类型转换成string的简单点的方法?

求助:error C2664: “CreateWindowExW”: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”

不能从const char *转换为LPCWSTR