我已经看到很多示例c ++代码在FAILED()函数/方法/宏中包装函数调用。 有人可以向我解释这是如何工作的吗?如果可能,有人知道c#等价物吗?
答案 0 :(得分:7)
它通常检查COM功能错误。但是,检查返回HRESULT
的任何函数都是它的意思。如果FAILED
值为负,则HRESULT
返回true值,这意味着函数失败(“错误”或“警告”严重性)。 S_OK
和S_FALSE
都是> = 0,因此它们不会用于传达错误。 “负”表示高位设置为HRESULT
错误代码,即,它们的十六进制表示,可以在例如,winerror中找到.h,以8开头,如0x8000FFFF。
答案 1 :(得分:2)
This page显示了定义FAILED()
的WinError.h包含文件的一半。它实际上只是一个非常简单的宏,整个定义如下:
#define FAILED(Status) ((HRESULT)(Status)<0)
答案 2 :(得分:0)
如果可能,有人知道c#等价物吗?
除非您使用COM对象,否则在C#中实际上不需要它。大多数.NET函数要么已经返回一个(或多或少)有意义的值(即null,false),要么在它们失败时抛出异常。
如果您正在直接访问COM对象,则可以定义一个简单的Failed函数,该函数执行unwind的帖子中的宏。定义本地(受保护/私有),因为无论如何都不应在您的应用程序中看到凌乱的COM细节。
如果您不知道,COM中还有一个SUCCEEDED宏。无需测试失败:)