如何转换CString到PCWSTR

时间:2010-11-30 09:27:25

标签: c++ windows type-conversion

我有以下方法:

    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

1 个答案:

答案 0 :(得分:3)

你真的应该使用Unicode(wchar_t而不是char)。这就是操作系统在内部运行的方式,并且可以防止必须在这种类型的char类型之间不断转换。

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

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

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