COM:如何获取有关COM错误的更多详细信息?

时间:2009-07-12 19:35:45

标签: c++ com oledb

映入眼帘,

使用DirectX时,你会得到一个名为DxErr9.h的#include这个很好的标题,它有很多非常有用的函数,如:

DXGetErrorString9

DXGetErrorDescription9

他们会告诉您关于HR给出的错误所需要知道的一切。

但是现在使用COM和OLE,我发现自己对COM函数返回的HRESULTS有点自负。在这一点上,它真的只是我和MSDN,还是在OLE DB中有类似的帮助函数,我还没有遇到过?

2 个答案:

答案 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 
}