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纳秒未间隔的计数值。
本文介绍了HRESULT类型及其在Win32中的应用,包括常见的成功与失败代码,并解释了如何正确使用HRESULT值。此外,还深入探讨了GUID的概念及其生成机制。


被折叠的 条评论
为什么被折叠?



