我有以下方法:

    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

最佳答案

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

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

[编辑]
例如,您可以将功能更改为:

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

关于c++ - 如何从CString转换为PCWSTR,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4312175/

10-17 02:46