COM是一组规范、CoClass……什么东东?我只知道CoCreateInstance。
COM由一个对象继承并实现一个(或多个)接口,可以在这些接口之间互相查询。类厂就是建立这个实际对象的工厂。

解决方案 »

  1.   

    详情请看《COM技术内幕》或《COM原理与应用》
      

  2.   

    com就是一个编程规范,基本上就是把东西拿出来作为接口,需要动态生成对象,所以需要一个类厂来动态生成对象。
    比如定义接口
    struct IMyInteface:public IUnknown
    {
       virtual MyFuc()
    }
    一般
    struct IUnknown
    {
       virtual QueryInterface(int nIid,void **ppv);
       virtual Release();
       virtual AddRef();  
    }
    然后一个类继承并实现这个接口
    class MyCom:public :IMyInteface
    {
       实现过程略
    };
    因为外部要动态的生成对象并使用其方法所以要有类厂
    class CFactory
    {
       其他略
       HRESULT CreateInstance(int clsid,int nId,void** ppv)
       {
          if(clsid==其实你定义的一个值)
          {
              CMyCom *pMyCom=new CMyCom();
              pMyCom->QueryInterface(nId,ppv);
              在这里就会得到一个指向对象的指针,至于QueryInterface只是通过强制转换得到         的 对象的不一样的指针而已
          }
          
     
       }
    };
     
    外部对象调用com的方法都要通过类厂动态生成对象,不管是动态库也好可执行程序也好,外部都要有个入口来调用类厂的方法生成对象,比如动态库的CoGetClassObject.
    看是不是通过这样获得一个对象的指针(IMyInteface)*pMyCom,这样COM的接口就暴露在外部啦
      

  3.   

    至于CLSID IID其实都是个索引值罢啦,微软的平台就用注册表来解决这个问题的。