如何将变量传递给MSXML中的IXMLDOMDocument :: save方法?

时间:2014-01-01 13:07:47

标签: c++ xml visual-c++ msxml

大家。我知道微软给出了一个关于IXMLDOMDocument的save方法的例子,如下所示: http://msdn.microsoft.com/en-us/library/windows/desktop/dd874226(v=vs.85).aspx

但是当我将save的参数更改为CString或char *等变量而不是常量时,我​​在save方法中得到了一个异常,如下所示: “VisualADS.exe中未处理的异常:0xC0000005:访问冲突。” 例外情况是:

#pragma implementation_key(76)
inline HRESULT MSXML2::IXMLDOMDocument::save ( const _variant_t & destination ) {
    HRESULT _hr = raw_save(destination);
    if (FAILED(_hr)) _com_issue_errorex(_hr, this, __uuidof(this));
    return _hr;
}

这是Visual Studio 6中的MFC MBCS项目,这是我的代码,thx!

CString strFilePathName = ar.GetFile()->GetFilePath();
CComBSTR ccbsFilePathName(strFilePathName);
CComVariant ccvFilePathName(ccbsFilePathName);
hr = pXMLDoc->save(ccvFilePathName);

1 个答案:

答案 0 :(得分:0)

您传递给IXMLDOMDocument::save的变体必须带有BSTR。如果您的项目是UNICODE项目,很有可能您无法进行任何转换,并且没有理由使用奇怪的尝试崩溃。

如果您在MBCS项目中,情况有所不同:在OLE / COM中使用之前,您必须以某种方式将文件名从MBCS转换为UNICODE。我建议使用CComBSTR

这样做
CString strFilePathName;
[...]
CComBSTR ccbsFilePathName( strFilePathName );
CComVariant ccvFilePathName( ccbsFilePathName );
hr = pXMLDoc->save( ccvFilePathName );