MSXML:如何以编程方式获取失败的错误文本?

Asked
Viewd878

3

当转换失败时,XMLNotepad提供以下文本(例如):

错误转换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!
    }
}
 

1 个答案

3

如果IXSLTemplate支持IErrorInfo(支持AFAIK),则可以查询该信息以获取其他信息。

(jeffamaphone用GetErrorInfo() API提示我正确的方式来获取它)

 CComPtr<IErrorInfo> error;
if (SUCCEEDED( GetErrorInfo(0, &error) ) && error)
{
   // call IErrorInfo::GetDescription(), etc.
}
 
  • 标记为答案...您已经很接近了。相反,解决方案是直接调用GetErrorInfo()API。http://msdn.microsoft.com/en-us/library/ms221032.aspx

    i_am_jorfMarch 21, 2009 19:49
  • 我怀疑获取IErrorInfo指针的正确方法不是通过QueryInterface,而是通过GetErrorInfo()COM API本身。我已经实现了,将查看是否可行。

    i_am_jorfMarch 09, 2009 19:27
  • 太可惜了。您可以尝试IXMLDOMParseError,但我敢肯定,只有DOMDocument类会使用它。

    Shog9March 06, 2009 19:21
  • 不是,它似乎不支持该界面。QueryInterface()返回E_NOINTERFACE。

    i_am_jorfMarch 06, 2009 19:04
  • 有趣...我什至都不知道。如果可行,请发布答案!

    Shog9March 09, 2009 20:23
  • @jeffamaphone:出色的工作,我已经更新了示例以反映这一点。

    Shog9April 12, 2009 22:27