为HRESULT代码生成诊断消息?

时间:2009-12-03 22:48:49

标签: c++ windows com

我希望能够做相当于FormatMessage的事情 - 为调试生成一条文本消息,甚至可以报告一些常见的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生成错误日志输出的合理充实工具?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

当你冥想时,_com_error::ErrorMessage()应该做到这一点。

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

some com macros available可帮助您拆分HRESULT的位。