COM组件中的 IUnknown接口(1)

来源:互联网 发布:超星数字图书软件 编辑:程序博客网 时间:2024/04/29 12:37

COM组件的一个主要优势是:便于升级。要实现这个优势需要满足两个条件:
1>为了更好的突出DLL的优势,还需要信息隐藏,即封装性。
2>运行时客户程序可动态加载和卸载,采用DLL技术可以实现。

1>从封装性看:
COM组件的信息隐藏采用IUnknown接口来实现,IUnknown意思是未知,即未知的接口,所有的COM接口都

需要继承IUnknown接口,因此若某个客户拥有一个IUnknown接口的指针,一是他不知道接口到底是什么

类型,二是他还需要知道通过此接口可以查询的其他接口。这时候就需要一个函数来提供这个功能:查

询某个组件是否支持某个特定的接口。这是提供函数QueryInterface的主要原因。因为一个COM对象可

以实现多个COM接口,当拥有QueryInterface函数后,客户可以在各个接口之间轻松跳动,可以很容易

地获得该对象的其它各个接口

2>从COM组件需要动态加载看:
   COM组件一旦发布出去,接口将永远保持不变。接口不变是指不能改变接口(即IID,该ID可以标示

该接口的唯一性,ta基于GUID),但是可以建立一个新的接口(新的IID)。
   COM组件这时候利用函数QueryInterface对新旧版本进行处理:
   当QueryInterface接受到对老IID查询时,返回老的接口。
   当接收到对新的IID查询时,它将返回新的接口查询。
   对QueryInterface而言,一个IID就是一个接口,所以同某个IID相应的接口绝不会发生变化。对于

老的接口仍然保持不变,因此已有客户的运行将不会受到任何影响。对于新客户则额可以自行决定使用

老接口还是新接口。这种处理多个版本的方法最有效的地方在于它是无缝的,客户不需要做任何附加的

动作。

0 0