新手问题,请问类工厂对象和COM类是什么关系啊?

沉思的鹅卵石 2004-11-20 07:33:08
我一直觉得有些迷惑,不明白为什么一定要用到类工厂(ClassFactory)。
我的初步理解是这样的,用COM类只是声明及定义了一些接口,但是它像抽象类一样是不能直接定义对象的。那么在实际使用COM时,必须生成此COM类的一个实例。所以,就定义了IClassFactory接口,利用它来生成COM类的实例。

另外,类工厂是不是COM的一个特殊接口啊?就像IUnknown一样。我看〈vc技术内幕〉时,说注册表注册COM类时,类工厂对象也必须被注册。不是很明白这句话的意思。---接口还要注册么?

不知道我的理解对不对啊?刚学COM,请大家给予指点。谢谢!
...全文
92 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
沉思的鹅卵石 2004-11-21
  • 打赏
  • 举报
回复
非常感谢!
yszmax 2004-11-20
  • 打赏
  • 举报
回复
强烈推荐《com技术内幕》
yszmax 2004-11-20
  • 打赏
  • 举报
回复
组件如果将某接口的全部方法都实现了,就称该组件支持某接口,com并没有规定组件和接口之间是虚函数继承的关系,只是在c++中以这种方法来实现最好而已。
IClassFactory说穿了就是专门构造组件的类,这样做是为了抽象,因为客户没有必要知道组件是什么,如果由客户直接构造组件,客户势必要知道组件的信息,com就失去了它的意义了,所以,规定了一个类厂(支持IClassFactory接口),每个组件的类厂都很清楚并且也只清楚该组件的信息,而客户只需要调用com库函数CoCreateInstance就可以了。
下面是流程图:
CoCreateInstance -->> CoGetClassObject -->> DllGetClassObject -->> new ClassFactory
-->>IClassFactory::CreateInstance() -->> new Component
yszmax 2004-11-20
  • 打赏
  • 举报
回复
类厂用来抽象组件的create过程,客户不需要知道组件的详细情况,也不需要知道类厂的详细情况,只要知道CoCreateInstance可以创建组件即可。而CoCreateInstance内部调用DllGetClassObject来生成该组件的类厂,由于类厂有组件的作者撰写,所以对组件类可谓知根知底,由类厂来生成组件完全行得通,这样客户和组件就进一步划分,客户只能查询该组件是否支持某借口,而对组件的其他情况一无所知,这样的划分可以使组件和客户间的耦合更小。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧