com技术内幕中说:CoCreateInstance是创建对象用的最多的一种方法,但是他的灵活性不足不能满足所有组件的需要,所以要引入类厂。我想知道他的灵活性不足指的是哪方面,不能满足那些组件的需要?

解决方案 »

  1.   

    为了使得创建com对象时与语言无关。
      

  2.   

    楼主你好,对于这个问题,我是这样理解的.COM这套机制,就是要求我们的组件与客户之间,尽量不要有任何的关联,也就是说要做到低藕合.
    带着这个思路我们看组件的建立过程,获得dll路径,加载,CoGetObject里面调用DllGetClassObject,这里如果直接去new组件的实现类,返回一个Ixxx的指针.一般情况下也许没有问题.不过很有可能我们写的组件还需要初始化的工作,比如我们有一个initMem的方法,这个方法执行正确,这个组件才能工作正确,如果初始化失败,就直接销毁刚才new的类.这件初始化的事情,是肯定不能客户端来做的,因为组件没有权利要求客户了解这些.可是不做初始化,组件暂时还不能用.当然,这件事也不可能由CoCreateInstance来做.所以这时,就需要有一个类厂这么个东西,它对组件很了解,它知道建立组件都要做哪些事,包括初始化.只要我对每个组件特定的类厂调用它的CreateIntance,组件就OK,肯定能用了.总之,就是为了更好的封装组件的细节.
    我最近也在看COM本质论,时间不长,前段时间也思考过这个问题.如果讲得不对,请朋友指正.希望和大家一道学习COM.