我正在寻找与以下宏等效的东西:

#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_THROWATLENSURE_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/

10-12 05:10