2009-03-06 2 views
3

XMLNotepad предоставляет следующий текст (например), когда преобразование не удается:MSXML: Как программно получить текст ошибки для неудачных преобразований?

Ошибка Преобразование XML
Переменная или параметр «насыщенного фона цвета» был дублирован же импорта старшинства.

Как я могу получить этот текст ошибки программно? Мой код выглядит следующим образом:

CComPtr<IXSLTemplate> tmpl; 
HRESULT hr = CoCreateInstance(CLSID_XSLTemplate, NULL, CLSCTX_INPROC_SERVER, IID_IXSLTemplate, (void**)&tmpl); 
if (SUCCEEDED(hr)) { 
    hr = tmpl->putref_stylesheet(xslt_doc); 
    if (SUCCEEDED(hr)) { 
    // Huzzah; do stuff. 
    } else { 
    // How do I get the error text? I want to log it! 
    } 
} 

ответ

3

IXSLTemplate Если поддерживает IErrorInfo (AFAIK, это делает), то вы можете запросить, что для получения дополнительной информации.

(jeffamaphone хорошо осведомленный меня в правильном пути, чтобы получить это - с помощью API GetErrorInfo() :)

CComPtr<IErrorInfo> error; 
if (SUCCEEDED(GetErrorInfo(0, &error)) && error) 
{ 
    // call IErrorInfo::GetDescription(), etc. 
} 
+0

Нет, это, кажется, не поддерживает этот интерфейс. QueryInterface() возвращает E_NOINTERFACE. –

+0

Это позор. Вы можете попробовать IXMLDOMParseError, но я уверен, что он используется только классами DOMDocument. – Shog9

+0

Да, я уже посмотрел на это. :( –