有人可以解释c ++ FAILED函数吗?

时间:2008-12-18 09:23:16

标签: c++ windows com

我已经看到很多示例c ++代码在FAILED()函数/方法/宏中包装函数调用。 有人可以向我解释这是如何工作的吗?如果可能,有人知道c#等价物吗?

3 个答案:

答案 0 :(得分:7)

它通常检查COM功能错误。但是,检查返回HRESULT的任何函数都是它的意思。如果FAILED值为负,则HRESULT返回true值,这意味着函数失败(“错误”或“警告”严重性)。 S_OKS_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宏。无需测试失败:)