gpt4 book ai didi

c++ - 是否有任何 ATL 支持的宏来检查 hresults 并返回值?

转载 作者:太空狗 更新时间:2023-10-29 21:05:06 25 4
gpt4 key购买 nike

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

#define FAILED_CHECK(hr) if(FAILED(hr)) return hr;

ATL 库中是否有如上所示的实现?

谢谢!

最佳答案

无论出于何种原因,ATL 都没有提供所要求的极其有用的宏。从 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 。

特别是,您可以使用 ATLENSURE_SUCCEEDEDHRESULT 失败时抛出异常,然后捕获异常,尤其是。在从 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 支持的宏来检查 hresults 并返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10812763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com