HRESULT
HRESULT类型并不是一个指向某个结果的句柄,它实际上是一个可分成三个域的32位值,三个部分的含义如图1:
系统所生成的HRESULT值在Win32的头文件WINERROR.h中有定义。如图1,HRESULT值中最重要的比特位表示函数调用是否成功。这种设计是的函数可以返回多个表示成功或失败的代码。HRESULT的低16为包含的就是函数的返回代码,其余的15为包含的是此类型及返回值起源的更详细的信息。
最常用的错误代码如下表,前缀S_表示成功返回,E_表示失败返回。
名称 | 含义 |
S_OK | 函数成功。在某些情况下,它还表示函数返回了一个布尔真值。S_OK被定义为0。 |
NOERROR | 同S_OK。 |
S_FALSE | 函数成功并返回一个布尔假值。S_FALSE被定义为1。 |
E_UNEXPECTED | 无法预知的失败。 |
E_NOIMPLE | 成员函数未被实现。 |
E_NOINTERFACE | 组件不支持所请求的接口。此值将由QueryInterface函数返回。 |
E_OUTOFMEMORY | 组件无法分配所需的内存。 |
E_FAIL | 没有指定的失败。 |
一般不能直接将HRESULT值同某个成功代码如S_OK或失败代码E_FAIL比较,而应使用SUCCEEDED或FAILED宏。
全局唯一标识符GUID
GUID(globally unique identifier)实际上是组件和接口的标识号。而IID实际上是一个128比特(16字节)的一个GUID结构。
GUID在时间和空间上都是唯一的。为保证空间唯一性,每一个GUID需要一个对于生成他的计算机来说是单一的48位值,这个值一般是机器上所装的网卡的地址。如果计算机上没有网卡,此单一值将用其他算法来生成。为保证时间上的唯一性,每一个GUID值具有一个60位的时间戳。这个时间戳表示的是自 1853 年 10 月 15 日 00:00:00:00以来以100纳秒未间隔的计数值。