描述:
今天在看com时,本一个问题弄糊涂了,其实这个问题很早就出现了,只不过没有去细想。问题是这样的,
com中,接口用IID标识,com对象是接口实现,用clsid来标识,那么com组件时是什么?他是com对象的实现吗?com对象只是一个类,不占用内存,这个c++里的类差不多一样的意思,我看潘爱民说组件时com对象的载体,对象不是实体,组件怎么回是对象的载体呢?在就是组件具有唯一性,他是怎么实现的,用clsid吗?
我看潘爱民的书,得出这样一个关系:一个组件对应n个com对象,1个com对象对应多个com接口,请问这个问题怎么解释?
解决方案1:
我说几点:
com组件是具有一定特殊性的dll或者exe.是一个可重用的二进制代码的集合体,可以拥有几对(对象类和对应的对象类工厂)。对象类工厂产生对象类的一个实例(也就是com对象,从这个意义上也可以认定跟c++中的对象概念是近视的),如果用c++来描述接口,那接口一般是具有纯虚函数的c++类。对象类实现该接口采用两种方式:1。该接口作为对象类的父类(atl中采用),2。该接口作为对象类的嵌套类(mfc中采用)。
我想说说我的理解
1、clsid表示一个组件,IID表示组件中的一个接口,一个组件可以实现几个接口,组件相当于c++中的类,接口相当于父类
2、创建好一个组件(clsid)后,可以通过这个组件查询(QueryInterface)相应的接口,就象由子类对象强制转换(reinterpret_cast)父类指针
3、com组件是平常用到的一个dll或其他,就是一个运行代码的集合体,就是说可以包含很多c++类,所以可以拥有几个com对象