我正在寻找与以下宏等效的东西:
#define FAILED_CHECK(hr) if(FAILED(hr)) return hr;
ATL 库中是否有任何实现如上所示?
谢谢!
最佳答案
无论出于何种原因,ATL 都没有提供像 requests 那样非常有用的宏。从 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 为此提供了有用的宏:
ATLENSURE_THROW
、 ATLENSURE_SUCCEEDED
和 friend 。特别是,您可以使用
HRESULT
在失败时抛出异常 ATLENSURE_SUCCEEDED
然后捕获异常,尤其是。在从 COM 接口(interface)调用返回之前,将其转换回 HRESULT:_ATLTRY {
// ...
ATLENSURE_SUCCEEDED(pFoo->Bar()); // Bar returns HRESULT
// ...
} _ATLCATCH(Exception) { // CAtlException class
return Exception; // Back to HRESULT through CAtlException's operator
}
关于c++ - 是否有任何 ATL 支持的宏来检查 hresult 并返回值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10812763/