《COM 原理与应用》学习笔记 - 第一部分 COM原理

http://tech.ddvip.com   2007年03月20日    社区交流

本文详细介绍《COM 原理与应用》学习笔记 - 第一部分 COM原理

  类型库的信息 HKEY_CLASS_ROOT/TypeLib

  字符串命名 ProgID HKEY_CLASS_ROOT/ (例如 "COMCTL.TreeCtrl")

  组件 GUID HKEY_CLASS_ROOT/COMTRL.TreeControl/CLSID

  缺省版本号 HKEY_CLASS_ROOT/COMTRL.TreeControl/CurVer

  (例如 CurVer = "COMTRL.TreeCtrl.1", 那么

  HKEY_CLASS_ROOT/COMTRL.TreeControl.1 也存在)

  当前机器所有组件类别 HKEY_CLASS_ROOT/Component Categories

  COM 提供两个 API 函数 CLSIDFromProgID 和 ProgIDFromCLSID 转换 ProgID 和 CLSID。

  如果 COM 组件支持同样一组接口,则可以把它们分到同一类中,一个组件可以被分到多个类中。比如所有的自动化对象都支持 IDispatch 接口,则可以把它们归成一类“Automation Objects”。类别信息也用一个 GUID 来描述,称为 CATID。组件类别最主要的用处在于客户可以快速发现机器上的特定类型的组件对象,否则的话,就必须检查所有的组件对象,并把组件对象装入到内存中实例化,然后依次询问是否实现了必要的接口,现在使用了组件类别,就可以节省查询过程。

  ---------------------------------------------------

  注册 COM 组件

  ---------------------------------------------------

  RegSrv32.exe 用于注册一个进程内组件,它调用 DLL 的 DllRegisterServer 和 DllUnregisterServer 函数完成组件程序的注册和注销操作。如果操作成功返回 TRUE,否则返回 FALSE。

  对于进程外组件程序,情形稍有不同,因为它自身是个可执行程序,而且它也不能提供入口函数供其他程序使用。因此,COM 规范中规定,支持自注册的进程外组件必须支持两个命令行参数 /RegServer 和 /UnregServer,以便完成注册和注销操作。命令行参数大小写无关,而且 “/” 可以用 “-” 替代。如果操作成功,程序返回 0,否则,返回非 0 表示失败。

责编:豆豆技术应用

正在加载评论...