• 您的位置我爱Aspx >> VC.Net >> Com Introduction
  • Com Introduction

  • 作者:aspxer  来源:internet  日期:2007-5-21 23:48:36  关键字:com
  • COM组件正是基于Adapter Pattern创建的。首先,你获得IUnknow接口,你需要某个服务的时候,才从IUnknow接口出发,去查找特定的接口。

    通过上面的分析,我们可以看到,Java对象和COM组件很相像。但两者的实现机制却大不相同,Java对象根据Java语言的特性实现,所有的接口实现都包含同一个类中。又有人要说了,Java对象也可以包含一些其它对象,把一些操作交给这些对象。我这里说的是,这同一个类必须显示地声明,实现所有的接口。比如

    class MyObject implements Comparable, Serializable, Interface1, …, interface n.

    只有这样,obj instanceof Comparable,obj instanceof Interface1这样的语句才能返回真。

    COM组件没有这样的限制。COM组件只返回二进制的VTable。COM组件本身可以不实现这些VTable,可以返回其它组件的VTable。不同的接口,可以在同一个组件中实现,也可以在不同的组件中实现。这也就是COM重用的“聚合”和“包含”等概念。

    而且,COM组件的生存状态也很灵活,可以存在于客户程序的进程空间,称为进程内组件,也可以存在于独立于客户程序的进程空间,称为进程间组件。

    当一个COM组件(我们称这个组件为A)的queryInterface方法返回其它组件(我们称这个组件为B)时,我们来看,现在,A组件的地位很像B组件的组件工厂,通过A组件创建B组件。我们现在可以明白,为什么不直接创建组件,而要采用一种不直观的方法,通过另一个组件——工厂组件来创建组件。这样,组件创建的概念就统一起来了——组件通过工厂组件创建。

    我不知道,这是一种巧合,还是一种设计上的深思熟虑。不管怎样,COM组件的设计构思给了我深深的震撼,真是巧夺天工。

    注意,由于queryInterface的自反性要求,实际上的处理要复杂一些。queryInterface的自反性:组件A的queryInterface返回组件B的接口,那么,调用这个组件B的queryInterface,也能够查到组件A的接口。还有甚者,如果组件B的queryInterface返回组件C的接口,组件C的queryInterface,也能够查到组件A的接口。

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:Windows外壳名字空间的浏览
    下一篇:VC程序调试技巧备忘录