C++ 是否有任何ATL支持的宏检查HRESULT并返回值?

C++ 是否有任何ATL支持的宏检查HRESULT并返回值?,c++,visual-c++,com,error-handling,atl,C++,Visual C++,Com,Error Handling,Atl,我正在寻找与以下宏等效的内容: #define FAILED_CHECK(hr) if(FAILED(hr)) return hr; ATL库中是否有实现如上所示的功能 谢谢 这是一个问题,而这个列表的重点是:似乎没有你要求的东西 没有特定于ATL的宏,因为大多数ATL函数使用标准的-请参阅列表 使用最多的有,包括和: #define FAILED(hr) (((HRESULT)(hr)) < 0) #define SUCCEEDED(hr) (((HRESULT)(hr)) >=

我正在寻找与以下宏等效的内容:

#define FAILED_CHECK(hr) if(FAILED(hr)) return hr;
ATL库中是否有实现如上所示的功能


谢谢

这是一个问题,而这个列表的重点是:似乎没有你要求的东西

没有特定于ATL的宏,因为大多数ATL函数使用标准的-请参阅列表

使用最多的有,包括和:

#define FAILED(hr) (((HRESULT)(hr)) < 0)
#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)

无论出于何种原因,ATL都没有像request那样提供非常有用的宏。从Visual Studio的几个版本开始,ATL引入了类似的宏:

/* Naming is slightly off in these macros
ATLENSURE_RETURN(condition) is an HRESULT return of E_FAIL
ATLENSURE_RETURN_VAL(condition, hr) is any return value (function can pick)
ATLENSURE_RETURN_HR(condition, hr) is HRESULT-specific, though currently the same as _VAL
*/
但又一次,没有立即匹配。你必须定义你自己的。或者,切换到在错误条件下引发异常。ATL为此提供了有用的宏:
atlsure\u THROW
atlsure\u successed
和friends

特别是,您可以使用
atlsecure\u successed
在失败时抛出异常
HRESULT
,然后捕获异常,尤其是在从COM接口调用返回之前,将其转换回HRESULT:

_ATLTRY {
  // ...
  ATLENSURE_SUCCEEDED(pFoo->Bar()); // Bar returns HRESULT 
  // ...
} _ATLCATCH(Exception) { // CAtlException class
  return Exception; // Back to HRESULT through CAtlException's operator
}

根据此帖子,不应使用ATLsureeded
_ATLTRY {
  // ...
  ATLENSURE_SUCCEEDED(pFoo->Bar()); // Bar returns HRESULT 
  // ...
} _ATLCATCH(Exception) { // CAtlException class
  return Exception; // Back to HRESULT through CAtlException's operator
}