我有以下方法:
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
答案 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;
}