Как передать переменную в метод IXMLDOMDocument :: save в MSXML?

каждый. Я знаю, что 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);

0

Решение

Вариант, который вы передаете IXMLDOMDocument::save должен нести BSTR, Если ваш проект в формате UNICODE, есть большие шансы, что у вас не будет конверсий, и нет причин для сбоя с помощью странных попыток.

Если вы находитесь в проекте MBCS, все будет иначе: вам нужно каким-то образом преобразовать имя файла из MBCS в UNICODE, прежде чем использовать его в OLE / COM. Я предлагаю сделать это с помощью CComBSTR учебный класс

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]