兰 州 理 工 大 学 毕 业 设 计
6
转换等。
3. 提供了一种标准的内存控制方法,用于控制进程中内存的分配。 COM
库负责组件程序的定位。当客户创建组件对象时, COM 库负责装入组件模块或
者启动组件进程,如果客户指定在远程机器上创建对象,则两台机器上的 C0M
库会协同完成远程 COM 对象的创建工作, 并且在客户进程中创建一个代理对象
(proxy object),客户程序直接与代理对象进行交互。因此,客户程序可以不管组
件对象的进程模型, 即使组件的进程模型发生了变化, 客户程序也不需要重新编
译。
2.1.2 注册表
系统注册表是一个全操作系统范围公用的信息,其中包含了所有的 COM
组件必要的信息以及其他一些信息, COM 库通过系统注册表所提供的信息进行
组件的创建工作。客户程序和组件程序都可以对系统注册表进行访问。
通过组件注册, 组件程序把它所实现的 COM 对象的信息以及接口信息都保
存到注册表中。 在 Windows 系统中运行 REGEDIT .EXE 可以运行注册表编辑器
编辑注册表。 HKEY_LASSES ROOT 键下的 CLSID 子键下包含了我们最关心的
组件程序的路径信息、 组件对象的程序标识符 (program identifier,ProgID)和类型
库信息。代理 DLL 和存根 DLL 信息保存在 interface 子键下。对于进程外组件,
CLSID 子键下包含 Localserver32子键。
COM 还提供了在注册表中对 COM 对象进行分类的机制,类别信息也用一
个 GUID 来 描 述 , 称 为 CATID , 在 每 个 对 象 CLSIB 键 下 包 含 一 个
―ImplementedCategori es‖子键,其中记录了该对象所属的类别。 COM 对象可以
属于多个类别。类别特性只是 COM 对象的部分特性,但如果 COM 对象要加入
到某个类别中, 则它必须实现该类别指定的所有接口。 组件类别最主要用处在于
客户可以快速地发现机器中特定类别的组件对象, 否则,就必须检查所有的组件
对象,并把组件对象装入到内存中实例化, 然后依次询问是否实现了必要的接口。
进 程 外 组 件 为 了 支 持 自 注 册 必 须 支 持 两 个 命 令 行 参 数 /Regserver 和
/Unregserver,以便完成注册或注销操作。
2.1.3COM 特性
(1)语言无关性
COM 规范的定义不依赖于特定的语言,因此,编写组件对所使用的语言
与编年写客户程序使用的语言可眺不同, 只要他们能够生成符合 COM 规范的可
执行代码即可。 COM 标准与面向对象的编程语言不同,它所采用的是一种二进