我希望能够做相当于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生成错误日志输出的合理充实工具?
答案 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的位。