【问题标题】:How to convert from CString to PCWSTR如何从 CString 转换为 PCWSTR
【发布时间】:2010-11-30 09:27:24
【问题描述】:

我有以下方法:

    VariantFromString(strXMLPath ,vXMLSource); 

方法的签名是:

HRESULT VariantFromString(PCWSTR wszValue, VARIANT &Variant);

现在,当我传递如下 CString 时:

char cCurrentPath[FILENAME_MAX];

        if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath)))
            {
                return errno;
            }
CString strXMLPath = cCurrentPath;
strXMLPath += XMLFILE;
VariantFromString(strXMLPath ,vXMLSource);

我收到错误:无法从 CString 转换为 PCWSTR

【问题讨论】:

    标签: c++ windows type-conversion


    【解决方案1】:

    您确实应该使用 Unicode(wchar_t 而不是 char)。这就是操作系统内部运行的方式,并且可以避免像这样不断地在 char 类型之间进行转换。

    但在这种情况下,您可以使用CString::AllocSysString 将其转换为与PCWSTR 兼容的BSTR。只需确保使用 SysFreeString 释放它即可。

    [编辑] 例如,您可以将函数更改为:

    VARIANT VariantFromString(const CString& str)
    {
        VARIANT ret;
        ret.vt = VT_BSTR;
        ret.bstrVal = str.AllocSysString();
        return ret;
    }
    

    【讨论】:

    • 我正在尝试将 CString 转换为 PCWSTR 而不是从 char* 转换为 CString
    • 我知道。 CString::AllocSysString 会将CString 转换为BSTR,与PCWSTR 兼容。
    • 另外,BSTR 正是VARIANT 中使用的,所以实际上你最好将你的函数更改为HRESULT VariantFromString(const CString& val, VARIANT& variant)
    • 我会使用 CComBSTR 类(如果你有它可用),它负责释放你手中的内存。
    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 2011-11-02
    • 2021-10-12
    • 2023-04-01
    • 2011-11-23
    • 2012-03-07
    • 2011-07-29
    • 2014-11-27
    相关资源
    最近更新 更多