创建com对象时为什么要用类厂? com技术内幕中说:CoCreateInstance是创建对象用的最多的一种方法,但是他的灵活性不足不能满足所有组件的需要,所以要引入类厂。我想知道他的灵活性不足指的是哪方面,不能满足那些组件的需要? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为了使得创建com对象时与语言无关。 楼主你好,对于这个问题,我是这样理解的.COM这套机制,就是要求我们的组件与客户之间,尽量不要有任何的关联,也就是说要做到低藕合.带着这个思路我们看组件的建立过程,获得dll路径,加载,CoGetObject里面调用DllGetClassObject,这里如果直接去new组件的实现类,返回一个Ixxx的指针.一般情况下也许没有问题.不过很有可能我们写的组件还需要初始化的工作,比如我们有一个initMem的方法,这个方法执行正确,这个组件才能工作正确,如果初始化失败,就直接销毁刚才new的类.这件初始化的事情,是肯定不能客户端来做的,因为组件没有权利要求客户了解这些.可是不做初始化,组件暂时还不能用.当然,这件事也不可能由CoCreateInstance来做.所以这时,就需要有一个类厂这么个东西,它对组件很了解,它知道建立组件都要做哪些事,包括初始化.只要我对每个组件特定的类厂调用它的CreateIntance,组件就OK,肯定能用了.总之,就是为了更好的封装组件的细节.我最近也在看COM本质论,时间不长,前段时间也思考过这个问题.如果讲得不对,请朋友指正.希望和大家一道学习COM. 怎样在CTreeCtrl上实现显示ToolTip功能! 准备放假出去玩了,散分先 。。。高分请教,,求不用Active控件实现串口编程的源码,,急,在线等待。。 如何监视应用程序的网络访问情况 上海某公司招聘要求,我一门也没精通,大家如何? ^_^请进来讨论一下“零内存保存”问题?解决便给分^_^ 创建WAV设备失败 win2000,装完了,自动关不了机,怎么办! 我需要在非中文系统下输出汉字(gb2312码)怎么解决 读0头0道0扇区 请问窗体从最小化恢复到normal时,应该捕捉什么消息呢? 【求助】关于AfxBeginThread的一个问题,我就剩10分了……
带着这个思路我们看组件的建立过程,获得dll路径,加载,CoGetObject里面调用DllGetClassObject,这里如果直接去new组件的实现类,返回一个Ixxx的指针.一般情况下也许没有问题.不过很有可能我们写的组件还需要初始化的工作,比如我们有一个initMem的方法,这个方法执行正确,这个组件才能工作正确,如果初始化失败,就直接销毁刚才new的类.这件初始化的事情,是肯定不能客户端来做的,因为组件没有权利要求客户了解这些.可是不做初始化,组件暂时还不能用.当然,这件事也不可能由CoCreateInstance来做.所以这时,就需要有一个类厂这么个东西,它对组件很了解,它知道建立组件都要做哪些事,包括初始化.只要我对每个组件特定的类厂调用它的CreateIntance,组件就OK,肯定能用了.总之,就是为了更好的封装组件的细节.
我最近也在看COM本质论,时间不长,前段时间也思考过这个问题.如果讲得不对,请朋友指正.希望和大家一道学习COM.