каждый. Я знаю, что 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
учебный класс
CString strFilePathName;
[...]
CComBSTR ccbsFilePathName( strFilePathName );
CComVariant ccvFilePathName( ccbsFilePathName );
hr = pXMLDoc->save( ccvFilePathName );
Других решений пока нет …