描述:
COM规定每个接口都继承至IUnknown,当一个COM类实现多个接口时,就会出现多重继承的情况,那每个接口都包含了IUnknown的三个函数,他们有着相同的实现,如果对每个接口进行引用控制,怎么判断是对哪个接口的引用计数?假设不需要对接口进行引用计数,那为什么不规定每个类都直接实现IUnknown,而其他接口只包含自己特有的函数,这样实现更为直观?COM规定每个接口都继承至IUnknown有什么优点?
望高手们指教,谢谢。
解决方案1:
c#里怎样不清楚,不过c++没有问题。
解决方案2: 1、多重继承的情况---你想对各个接口进行计数,那你就用多个类继续每一个接口,再用一个类多重继承上面的多个类就可以了。2一般是不需要单独对每个接口进行引用计数,只要对该组件进行引用计数就可以了。因为你使用的是组件。
2、至于优点。说一点,当你不是多重继承时,这就可以明显体现出优点。
接口级别的引用记数控制我觉得可以设置全局记数之类的办法来解决。
接口的接口,我的意思是:客户查询组件的其他接口时,也是通过接口来完成的,这个接口就是IUnknown。
COM接口继承之IUnknown,所以接口的vtbl中的前三个函数都是Q,A,R。这样所有的接口指针同时也是IUnknown指针,所以客户不需要单独维护一个代表组件的指针,我们只关心接口的指针,这就是好处!
好贴,我也是刚接触COM,也有很多地方不明白,希望此贴能引来更多的高手帮我们这些菜鸟指导些概念问题.
第一个问题,对引用记数的控制不过是组件维护自身生命期的一种手段,以便在没有客户使用的时候释放自己,既然组件实现多接口,那么就应该有组件来维护引用记数。
第二和第三个问题是同一个性质,楼主对组件的概念还是没掌握,所谓组件就是接口的接口,通过一个接口可以查询到其他所有组件所支持的接口,这由IUnknown里定义的QueryInterface实现的,所以每个接口都要继承IUnknown.
楼主好好看看书,基础打好。
为什么不规定每个类都直接实现IUnknown?
因为实现的接口不同,IUnknown的三个函数实现也会有很大的不同.针对聚合/套间/接口类型等不同,调用机制是很复杂的.
去VCKBase网站看看COM 组件设计与应用那个系列文章,你就会明白了。
解决方案8: 不是可以通过QueryInterface来获得相应的接口的吗,呵呵
然后就可以对不同的接口操作计数了
COM规定每个接口都继承至IUnknown有什么优点?
因为每个接口都必须要有那三个函数,所以继承IUnknown,
建议楼主看看COM入门的书