COM组件注册信息
根据COM规范,客户程序通过COM库完成COM对象的创建,COM库则通过注册表所提供的信息进行组件的创建。注册表中包含了所有COM组件的必要信息。组件程序和客户程序都可访问注册表。组件程序把它所实现的COM对象的信息及接口信息保存到注册表中,称之为组件的注册。
COM组件在HKEY_CLASSES_ROOT下。对一个进程内组件,组件CLSID子项下有InprocServer32子项(进程外组件则有LocalServer32子项),子项的默认建值就是组件程序的全路径文件名;组件CLSID子项下还包含一些与组件相关的其它信息。如,组件的版本、OLE组件的InprocHandler32子项、组件程序的图标信息、组件程序的类型库等。
如果COM组件支持同一组接口,则可把它们分到同一个类中。一个组件可被分到多个类中。比如所有的自动化对象都支持IDispatch接口,则可把它们归成一类Automation Objects。类别信息也用一个GUID来描述,称为CATID。组件类别最主要的用处在于客户可快速发现本机上的特定类型的组件对象。否则,就必须检查所有的组件对象,并把组件对象载入内存,然后依次询问是否实现了必要的接口。使用组件类别,就可节省查询过程。
RegSrv32.exe用于注册一个进程内组件,它调用DLL的DllRegisterServer和DllUnregisterServer函数完成组件程序的注册和注销操作。如果操作成功返回TRUE,否则返回 FALSE。对于进程外组件程序,情形稍有不同,因为它自身是个可执行程序,而且它也不能提供入口函数供其它程序使用。因此,COM规范中规定,支持自注册的进程外组件必须支持两个命令行参数 /RegServer和/UnregServer,用于注册和注销。命令行参数大小写无关(可用-替代/)。操作成功,返回0,否则,返回非0。