复习:类(续) 类厂与CM对象有一一对应关系 字典组件 多对象、多类厂组件 类厂1 类厂2 IClassFactory IDictionary 字典对象 对象1 对象2 SPellcHeck
复习:类厂(续) !类厂与COM对象有一一对应关系 对象有一一对应关系 字典组件 IClassFactory 类厂 字典对象 IDictionary ISpellCheck 多对象、多类厂组件 类厂 1 对象 1 类厂 2 对象 2
复习:c0M创建函数 CoGetClassobject Cocreateinstance e CocreatelnstanceEx 冷注意:对于DL组件,创建函 数调用D| GetClassobject引出 函数创建类厂,再由类厂创建 COM对象
复习:COM创建函数 !CoGetClassObject CoGetClassObject !CoCreateInstance CoCreateInstance !CoCreateInstanceEx CoCreateInstanceEx !注意:对于DLL组件,创建函 数调用DllGetClassObject DllGetClassObject引出 函数创建类厂,再由类厂创建 函数创建类厂,再由类厂创建 COM对象
复习:C0M库 CO库的初始化 COM库的内存管理 冷组件程序的装载和卸载 冷常用函数和 HRESULT GUD管理 创建函数 初始化函数 内存管理函数 字符串使用 OLECHAR类型
复习:COM库 !COM库的初始化 !COM库的内存管理 !组件程序的装载和卸载 组件程序的装载和卸载 !常用函数和HRESULT HRESULT – GUID管理 – 创建函数 – 初始化函数 – 内存管理函数 – 字符串使用OLECHAR OLECHAR类型
复习:实现一个进程内C0M组件的步骤 少定义必要的CLSD和ID 少实现COM对象 通过 QueryInterface暴露其接口 一管理引用计数,注意对全局引用计数的维护 实现类厂对象 对象的引用计数不记在全局对象引用计数内 维护锁计数 冷实现D| Getclassobject、D‖ CanUnloadnow (可选)实现两个注册函数
复习:实现一个进程内 复习:实现一个进程内COM组件的步骤 !定义必要的CLSID 和IID !实现COM对象 – 通过QueryInterface QueryInterface暴露其接口 – 管理引用计数,注意对全局引用计数的维护 管理引用计数,注意对全局引用计数的维护 !实现类厂对象 – 对象的引用计数不记在全局对象引用计数内 对象的引用计数不记在全局对象引用计数内 – 维护锁计数 !实现DllGetClassObject DllGetClassObject 、DllCanUnloadNow DllCanUnloadNow ! (可选 )实现两个注册函数 实现两个注册函数
可重用性( reuse,复用) 重用性:当一个程序单元能够对其他的程序单元提 供功能服务时,尽可能地重用原先程序单元的代码, 既可以在源代码一级重用,也可以在可执行代码一级 重用。 冫COM重用性:因为M是建立在二进制代码基础 上的标准,所以其重用性也必然建立于二进制代码上。 COM重用模型:包容和聚合 ☆真正的重用:是实现重用而不是代码重用
可重用性(reuse,复用) !重用性:当一个程序单元能够对其他的程序单元提 当一个程序单元能够对其他的程序单元提 供功能服务时,尽可能地重用原先程序单元的代码, 供功能服务时,尽可能地重用原先程序单元的代码, 既可以在源代码一级重用,也可以在可执行代码一级 既可以在源代码一级重用,也可以在可执行代码一级 重用。 !COM重用性:因为COM是建立在二进制代码基础 是建立在二进制代码基础 上的标准,所以其重用性也必然建立于二进制代码上。 上的标准,所以其重用性也必然建立于二进制代码上。 !COM重用模型:包容和聚合 重用模型:包容和聚合 !真正的重用:是实现重用而不是代码重用 是实现重用而不是代码重用