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

Winapi MSXML:如何以编程方式获取失败转换的错误文本?,winapi,xslt,msxml,Winapi,Xslt,Msxml,XMLNotepad在转换失败时提供以下文本(例如): 转换XML时出错 变量 或参数 “饱和背景色”为 使用相同的导入复制 优先权 如何以编程方式获取此错误文本?我的代码如下所示: CComPtr<IXSLTemplate> tmpl; HRESULT hr = CoCreateInstance(CLSID_XSLTemplate, NULL, CLSCTX_INPROC_SERVER, IID_IXSLTemplate, (void**)&tmpl); if (SUCCE

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!
    }
}
CComPtr tmpl;
HRESULT hr=CoCreateInstance(CLSID_XSLTemplate,NULL,CLSCTX_INPROC_SERVER,IID_IXSLTemplate,(void**)和tmpl);
如果(成功(hr)){
hr=tmpl->putref_样式表(xslt_doc);
如果(成功(hr)){
//胡扎,做点什么。
}否则{
//如何获取错误文本?我想记录它!
}
}

如果
IXSLTemplate
支持
IErrorInfo
(当然,它支持),那么您可以查询更多信息

(jeffamaphone告诉我正确的方法——使用
GetErrorInfo()
API:)

CComPtr错误;
if(成功(GetErrorInfo(0,&error))&&error)
{
//调用IErrorInfo::GetDescription()等。
}

不,它似乎不支持该接口。QueryInterface()返回E_NOINTERFACE。真遗憾。您可以尝试使用IXMLDOMParseError,但我非常确定它只被DOMDocument类使用。我怀疑获取IErrorInfo指针的正确方法不是通过QueryInterface,而是通过GetErrorInfo()COM API本身。我已经实现了,并将看看它是否有效。有趣的是。。。我甚至都不知道。发布一个答案,如果它的工作!标记为答案。。。你很接近。相反,解决方案是直接调用GetErrorInfo()API。
CComPtr<IErrorInfo> error;
if (SUCCEEDED( GetErrorInfo(0, &error) ) && error)
{
   // call IErrorInfo::GetDescription(), etc.
}