映入眼帘,
使用DirectX时,你会得到一个名为DxErr9.h的#include这个很好的标题,它有很多非常有用的函数,如:
DXGetErrorString9
和
DXGetErrorDescription9
他们会告诉您关于HR给出的错误所需要知道的一切。
但是现在使用COM和OLE,我发现自己对COM函数返回的HRESULTS有点自负。在这一点上,它真的只是我和MSDN,还是在OLE DB中有类似的帮助函数,我还没有遇到过?
答案 0 :(得分:3)
此外,您应该查看error info。 COM系统的一部分是错误信息的概念,在不同时间是per-thread global which can be set and cleared。您query for it响应错误,如果是set,则会提供比查看HRESULT
更有用的信息。
HRESULT hr=something();
if (FAILED(hr))
{
CComPtr<IErrorInfo> err;
::GetErrorInfo(0, &err);
if (err)
{
CComBSTR description;
err->GetDescription(&description);
// description will be a more descriptive error message than just formatting the
// HRESULT because it is set by the COM server code at the point of the error
}
}
答案 1 :(得分:1)
使用_com_error获取有意义的字符串:
#include <comdef.h>
HRESULT hr = SomeComFunc();
if ( FAILED(hr) )
{
_com_error err(hr);
LPTCSTR szErrMsg = err.ErrorMessage();
// log szErrMsg or whatever
}