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
}