为HRESULT代码生成诊断消息?

问题描述:

我希望能够做到相当于FormatMessage - 为调试生成文本消息,甚至是可以报告一些常见HRESULT的运行时版本,甚至可以吐出严重程度,它是什么设施,并可能包含对错误代码的描述。为HRESULT代码生成诊断消息?

我发现this simple function,但其过于简单,而且大多似乎产生“未知错误”。但到目前为止,我还没有发现任何看起来更有希望的东西。

我可以做类似如下:

CComPtr<IErrorInfo> iei; 
if (S_OK == GetErrorInfo(0, &iei) && iei) 
{ 
    // get the error description from the IErrorInfo 
    BSTR bstr = NULL; 
    if (SUCCEEDED(iei->GetDescription(&bstr))) 
    { 
     // append the description to our label 
     Append(bstr); 

     // done with BSTR, do manual cleanup 
     SysFreeString(bstr); 
    } 
} 
else if (HRESULT_FACILITY(hr) == FACILITY_WIN32) 
{ 
    // append the description to our label 
    Append(CErrorMessage(HRESULT_CODE(hr)).c_str()); 
} 

不过,我不知道如果我完成什么比_com_error更多。

有没有人知道用于生成HRESULT错误日志输出的合理设施?

正如你所想,_com_error::ErrorMessage()应该做的伎俩。

如果您收到“未知错误”,那么您所获取的HRESULT可能并不为Windows所知。对于这些消息,请尝试转储HRESULT值和figuring out if they actually map to win32 error codes

some com macros available帮助你打出HRESULT的位。

+0

这和boost :: system库看起来一样好。谢谢。 :) – Mordachai 2009-12-07 14:53:37

你使用Boost? boost :: system库将自动查找HRESULT和Win32 API结果代码。

如果您直接使用WIN32,FormatMessage()调用应该会帮助您。