COM 与Windows Registry
在EX24A的例子中,在一种清晰明确的假设环境下,组件被静态的链接到了客户端。在真正的COM中,组件要么是DLL要么是独立的EXE。当客户程序调用的CoGetClassObject方法,COM将进入并且查找定位在磁盘某处正确的组件。COM是如何建立起这个联系的呢?它将在window Registry中查找类的唯一128位类ID,因此,这个被查找的类必须永久的注册进你的电脑内。
如果你运行windwos Registry程序(在Windows NT 3.51里是Regedit32),你将会看到与图24-5相似的界面。这个图显示的是类ID的子目录,有三个是与DLL类ID相关的(InproceServer32),其中有一个是与EXE类ID相关的(LocalServer32)。CoGetClassObject方法在注册表类找到类ID,然后载入所需的DLL或EXE。
如果你不想记住那些难以理解的类ID的数字,可以吗?没问题。COM支持另外一种注册类型数据库条目,它能够帮助我们将一个人容易理解的易编程的ID转换成相应类ID,图24-6显示的是这个条目在注册表中的位置,COM的CLSIDFromProgID方法通过读取这个数据库条目,然后执行该转换。
Figure 24-5.