为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的位。
答
你使用Boost? boost :: system库将自动查找HRESULT和Win32 API结果代码。
答
如果您直接使用WIN32,FormatMessage()调用应该会帮助您。
这和boost :: system库看起来一样好。谢谢。 :) – Mordachai 2009-12-07 14:53:37