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

3

您好,

当使用DirectX时,您可以使用名为DxErr9.h的头文件进行#include,它具有非常有用的函数,例如:

DXGetErrorString9

DXGetErrorDescription9

它们根据HR告诉您有关错误的所有信息。

但是现在在使用COM和OLE时,我发现我需要自己处理从COM函数返回的HRESULTS。现在只能依靠MSDN,或者我还没有找到类似的OLE DB辅助函数吗?

2个回答

3
此外,你应该查看错误信息。COM系统的一部分是错误信息的概念,它是一个每个线程的全局变量,在不同的时间可以设置和清除。当出现错误时,你需要查询它,如果它被设置,它将提供比仅查看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
  }
}

谢谢。这个错误信息是"[Microsoft][ODBC Driver Manager] Data source name not found",真是太好了。 - bobobobo

1

使用 _com_error 获取有意义的字符串:

#include <comdef.h>

HRESULT hr = SomeComFunc();
if ( FAILED(hr) )
{
  _com_error err(hr);
  LPTCSTR szErrMsg = err.ErrorMessage();
  // log szErrMsg or whatever 
}

嗯,这让我遇到了“未指定的错误”。虽然它有帮助,但我想知道为什么它不能提供更多信息。 - bobobobo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接