思勤无邪

上学时,因我年龄最小,个头也最小,上课时,就像大猩猩堆里的猴一般。如今,这猴偶尔也把最近的一些情况写在这里。

   :: 首页 :: 联系 :: 聚合  :: 管理
  132 Posts :: 1 Stories :: 178 Comments :: 0 Trackbacks

公告

     吾日常三省吾身,曰思、曰勤、曰无邪。

积分与排名

  • 积分 - 177547
  • 排名 - 143

最新随笔

最新评论

阅读排行榜

评论排行榜

读过《COM技术内幕》,理一下用类厂创建COM类的过程以及之间的关系。

类厂用来抽象组件的create过程,客户不需要知道组件的详细情况,也不需要知道类厂的详细情况,只要知道CoCreateInstance可以创建组件即可。而CoCreateInstance内部调用DllGetClassObject来生成该组件的类厂,由于类厂有组件的作者撰写,所以对组件类可谓知根知底,由类厂来生成组件完全行得通,这样客户和组件就进一步划分,客户只能查询该组件是否支持某接口,而对组件的其他情况一无所知,这样的划分可以使组件和客户间的耦合更小。
组件如果将某接口的全部方法都实现了,就称该组件支持某接口,com并没有规定组件和接口之间是虚函数继承的关系,只是在c++中以这种方法来实现最好而已。  
  IClassFactory说穿了就是专门构造组件的类,这样做是为了抽象,因为客户没有必要知道组件是什么,如果由客户直接构造组件,客户势必要知道组件的信息,com就失去了它的意义了,所以,规定了一个类厂(支持IClassFactory接口),每个组件的类厂都很清楚并且也只清楚该组件的信息,而客户只需要调用com库函数CoCreateInstance就可以了。   
  创建流程图:  
  CoCreateInstance   -->>   CoGetClassObject   -->>   DllGetClassObject   -->>   new   ClassFactory    -->>IClassFactory::CreateInstance()   -->>   new   Component
posted on 2007-03-07 10:24 思勤无邪 阅读(1695) 评论(0)  编辑 收藏 引用 所属分类: C++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理