gpt4 book ai didi

c++ - 在 Direct2D 应用程序中处理 HRESULT

转载 作者:行者123 更新时间:2023-11-30 01:24:38 25 4
gpt4 key购买 nike

在 Kenny Kerr 关于成像和 Direct2D 的 msdn 杂志文章中,他经常使用 HR() 宏。

在他的 Windows Imaging Component 文章中 - http://msdn.microsoft.com/en-gb/magazine/cc500647.aspx

他写道-

Finally, the WIC API makes use of HRESULTs to describe errors. The samples in this article use the HR macro to clearly identify where methods return an HRESULT that needs to be checked. You can replace this with your own error-handling strategy—whether that is throwing an exception or returning the HRESULT yourself.

HR(decoder.CoCreateInstance(CLSID_WICTiffDecoder));

然而,Kenny 没有展示他对 HR() 的定义。我是 C++ 初学者,正在尝试发现和理解代码的细节。我想知道他对 HR() 的实现是什么,以便我可以考虑如何最好地处理我程序中的 HRESULT。我搜索了一个定义,但似乎没有这些特定文章的源代码。

在学习 macros 时,我遇到了这些建议使用 inline 函数而不是宏的最新文档 -

http://msdn.microsoft.com/en-us/library/vstudio/ttsbh614.aspx

http://msdn.microsoft.com/en-us/library/vstudio/z8y1yy88.aspx

谁能告诉我 Kenny 是如何定义他的 HR() 宏的?它实际上做了什么?

我的 Direct2D 程序应该如何处理 HRESULT?正确使用 HRESULT 以使程序可靠且有弹性的方法是什么?

最佳答案

我不确定 Kenny 的宏,但我想您绝对需要了解以下内容:错误代码设置了最高有效位并使整个值变为负数。 “标准”宏 SUCCEEDEDFAILED 测试代码正是为此。

HRESULT nValue = ...
if(SUCCEEDED(nValue)) {
// Not Error
}

为了代码的简洁性和可读性,您需要一个同时执行这两项操作的宏:测试成功/失败并返回错误或抛出异常。我想有问题的 HR 宏执行两者之一。

如果你打算使用 ATL,已经有这种类型的预定义宏:ATLENSURE_SUCCEEDEDATLENSURE_THROW 等。尽管微软决定不记录它们(我不是请注意此处提供的 MSDN 链接)。

您的 HR 可能是这样的(取决于所需的操作 - 在错误时抛出或退出):

inline VOID HR(HRESULT nValue) { if(FAILED(nValue)) AtlThrow(nValue); }

#define HR(x) { HRESULT nValue = (x); if(FAILED(nValue)) return nValue; }

此外,为了方便地解码 WIC 和 D2D HRESULT,您可能需要使用此 system tray helper app .

关于c++ - 在 Direct2D 应用程序中处理 HRESULT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13481231/

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