все. Я знаю, что Microsoft привела пример о методе сохранения IXMLDOMDocument следующим образом: http://msdn.microsoft.com/en-us/library/windows/desktop/dd874226(v=vs.85).aspx
Но когда я изменил параметр save на переменную типа CString или char * вместо константы, я получил исключение в методе сохранения, например: "Необработанное исключение в 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;
}
Это проект MFC MBCS в Visual Studio 6, здесь мой код, спасибо!
CString strFilePathName = ar.GetFile()->GetFilePath();
CComBSTR ccbsFilePathName(strFilePathName);
CComVariant ccvFilePathName(ccbsFilePathName);
hr = pXMLDoc->save(ccvFilePathName);
Вариант, который вы передаете IXMLDOMDocument::save
должен иметь BSTR
. Если ваш проект является UNICODE, есть большие шансы, что у вас не будет никаких конверсий, и нет причин для сбоев при использовании странных попыток.
Если вы работаете в проекте MBCS, все по-другому: вы должны каким-то образом преобразовать имя файла из MBCS в UNICODE, прежде чем использовать его в OLE/COM. Я предлагаю сделать это с CComBSTR
класса CComBSTR
CString strFilePathName;
[...]
CComBSTR ccbsFilePathName( strFilePathName );
CComVariant ccvFilePathName( ccbsFilePathName );
hr = pXMLDoc->save( ccvFilePathName );