今天在看com时,本一个问题弄糊涂了,其实这个问题很早就出现了,只不过没有去细想。问题是这样的,
com中,接口用IID标识,com对象是接口实现,用clsid来标识,那么com组件时是什么?他是com对象的实现吗?com对象只是一个类,不占用内存,这个c++里的类差不多一样的意思,我看潘爱民说组件时com对象的载体,对象不是实体,组件怎么回是对象的载体呢?在就是组件具有唯一性,他是怎么实现的,用clsid吗?
我看潘爱民的书,得出这样一个关系:一个组件对应n个com对象,1个com对象对应多个com接口,请问这个问题怎么解释?

解决方案 »

  1.   

    我想说说我的理解
    1、clsid表示一个组件,IID表示组件中的一个接口,一个组件可以实现几个接口,组件相当于c++中的类,接口相当于父类
    2、创建好一个组件(clsid)后,可以通过这个组件查询(QueryInterface)相应的接口,就象由子类对象强制转换(reinterpret_cast)父类指针
    3、com组件是平常用到的一个dll或其他,就是一个运行代码的集合体,就是说可以包含很多c++类,所以可以拥有几个com对象
      

  2.   

    我说几点:
     com组件是具有一定特殊性的dll或者exe.是一个可重用的二进制代码的集合体,可以拥有几对(对象类和对应的对象类工厂)。对象类工厂产生对象类的一个实例(也就是com对象,从这个意义上也可以认定跟c++中的对象概念是近视的),如果用c++来描述接口,那接口一般是具有纯虚函数的c++类。对象类实现该接口采用两种方式:1。该接口作为对象类的父类(atl中采用),2。该接口作为对象类的嵌套类(mfc中采用)。
      

  3.   

    还是不理解,组件相当于c++中的类,接口相当于父类,这好像在com技术内幕中也是这样说的,但是,组建是
    可运行的二进制代码实体,通常是以dll发布的,而类只是一个结构,并不是代码实体啊。楼上的大哥,你所得对象类是什么?是组件吗?
      

  4.   

    COM对象是实现COM接口的程序,COM组件是COM对象的集合,通常以dll或exe的方式来发布
    COM与语言无关,接口实现了访问二进制代码的标准,或者说是一种协议