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

0

все. Я знаю, что 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
    joelonsoftware.com/articles/Unicode.html
  • 0
    Пожалуйста, покажите, как объявлен buf
Показать ещё 3 комментария
Теги:
visual-c++
msxml

1 ответ

0

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

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

CString strFilePathName;
[...]
CComBSTR ccbsFilePathName( strFilePathName );
CComVariant ccvFilePathName( ccbsFilePathName );
hr = pXMLDoc->save( ccvFilePathName );
  • 0
    Здравствуйте, я изменил код на это, но все еще столкнулся с той же проблемой: CString strFilePathName = ar.GetFile () -> GetFilePath (); CComBSTR ccbsFilePathName (strFilePathName); CComVariant ccvFilePathName (ccbsFilePathName); hr = pXMLDoc-> save (ccvFilePathName);
  • 0
    @hsluoyz Обновите ваш вопрос, указав фактический код, и обновите полученную ошибку, если она не совпадает.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню