《COM技术内幕》 §6 —— HRESULT、GUID和注册表
没有仔细看(Note:这也是很重要的一章)
《COM技术内幕》 §6 —— HRESULT、GUID和注册表(重新学习)
(1)关于HRESULT
COM组件使用HRESULT来向用户报告各种情况。许多COM接口函数所返回的均是HRESULT值。
NOTE HERE:HRESULT != Handle to RESULT,HRESULT = Here's the RESULT。
常用HRESULT值(其中表示成功的有一个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 | 没有指定的失败。 |
NOTE HERE:S_FALSE被定义为1,而S_OK被定义为0。这与C和C++的编程原则正好相反。一般不能使用HRESULT值同某个成功代码(如S_OK),而应使用SUCCEEDED或FAILED。
定义自己的HRESULT的一般规则:
(2)GUID
在VC的安装目录下/COMMON/Tools/GUIDGEN.exe可以生成GUID码。
(3)注册表与CLSID
ProgID的命名约定:<Program>.<Component>.<Version>
?组件类别?
(4)COM库函数
在使用COM库中的其它函数之前(CoBuildVersion除外),进程必须先调用CoInitialize来初始化COM库函数。当进程不再需要使用COM库函数时,必须调用CoUninitialize。函数原型定义如下:
| HRESULT CoInitialize(void* reserved); // Argument must be NULL void CoUninitialize(); |
本文详细介绍了COM技术中的关键概念,包括HRESULT的使用及其常见值的含义,如何生成GUID码,以及注册表与CLSID的关系。同时,文章还强调了初始化和卸载COM库函数的重要性。
1万+

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



