HRESULT

HRESULT 是一种简单的数据类型,通常被属性和 ATL 用作返回值。下表说明各种不同的值。头文件 winerror.h 中包含更多的值。
名称 说明 值
S_OK 操作成功 0x00000000
E_UNEXPECTED 意外的失败 0x8000FFFF
E_NOTIMPL 未实现 0x80004001
E_OUTOFMEMORY 未能分配所需的内存 0x8007000E
E_INVALIDARG 一个或多个参数无效 0x80070057
E_NOINTERFACE 不支持此接口 0x80004002
E_POINTER 无效指针 0x80004003
E_HANDLE 无效句柄 0x80070006
E_ABORT 操作已中止 0x80004004
E_FAIL 未指定的失败 0x80004005
E_ACCESSDENIED 一般的访问被拒绝错误 0x80070005  

HRESULT 其实是一个双字节的值,其最高位(bit)如果是0表示成功,1表示错误。我们在程序中如果需要判断返回值,则可以使用比较运算符号;switch开关语句;也可以使用VC提供的宏: HRESULT hr = 调用组件函数;
 不能简单地把返回值与 S_OK 和 S_FAIL 比较,而要用 SUCCEEDED 和 FAILED 宏进行判断。
if( SUCCEEDED( hr ) ){...} // 如果成功    if( FAILED( hr ) ){...} // 如果失败
SUCCEEDED(hr);是用来判断com接口方法的返回值hr是否正确运行,当hr小于0时表示接口方法遇到错误,于是SUCCEEDED的结果就是FALSE,否则就是TRUE。
ASSERT(SUCCEEDED(hr))就是确保hr是个非负整数。
  
posted @ 2016-11-10 10:26  fyk1Ex  阅读(455)  评论(0)    收藏  举报