大家好,欢迎来到IT知识分享网。
2019独角兽企业重金招聘Python工程师标准>>>
1. SUCCEEDED
原型如下:
BOOL SUCCEEDED( HRESULT hr );
对应的定义(具体的实现):#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)
2. FAILED
原型如下:
BOOL FAILED( HRESULT hr );
对应的定义(具体的实现):#define FAILED(hr) (((HRESULT)(hr)) < 0)
注意:
使用这两个宏来对COM组件的返回值HRESULT进行判断;
因为HRESULT值为返回状态,可能有很多种状态,所以不能直接判断
3 关于HRESULT
如果函数正常执行,则返回S_OK,同时真正的函数运行结果则通过参数指针返回。如果遇到了异常情况,则COM系统经过判断,会返回相应的错误值。
HRESULT 其实是一个双字节的值,其最高位(bit)如果是0表示成功,1表示错误。具体参见 MSDN 之”Structure of COM Error Codes”说明。我们在程序中如果需要判断返回值,则可以使用比较运算符号;switch开关语句;也可以使用VC提供的宏:
大多数COM 函数以及一些接口成员函数的返回值类型均为HRESULT 类型。HRESULT 类型的返回值反映了函数中的一些情况,其类型定义规范如下:
注意:不能简单地把返回值与S_OK和S_FALSE比较,而要用SECCEEDED 和FAILED 宏进行判断
FAILED和SUCCEEDED是windows中定义的宏函数,而S_OK只是一个特定的值。
#define SUCCEEDED(Status) ((HRESULT)(Status) >= 0)
#define FAILED(Status) ((HRESULT)(Status) <0)
成功的代码有多个,失败的代码也有多个一个函数在各种情况下返回的状态代码通常将包含多个成功代码及多个失败代码。
这就是我们为什么要使用SUCCEEDED及FAILED宏的原因。一般不能直接将HRESULT值同某个成功代码(如S_OK)进行比较以决定某个函数是否成功。
转载于:https://my.oschina.net/u//blog/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124571.html