我有一个COM组件叫 IALL,其中有3个子对象分别为IA、IB、IC,IA为基对象,当我创建IALL时,使用如下语句:
CoCreateInstance(&CLSID_IALL, 0, CLSCTX_ALL,&IID_IALL,(void**)&all);
我的问题是这里获得的all指针是不是等同于IA中(基对象)虚表的指针?

解决方案 »

  1.   

    这时候应该是.idl文件中指定的缺省接口指针吧[default] interface
      

  2.   

    如果IA里有个方法Add()
    那我是不是可以直接用all->Add()   ?
      

  3.   

    额,COM的结构好像你没弄清楚。struct IAdd: public IUnknown//接口声明
    {
       virtual int Add()=0;
       ...
    };
    struct ISub: public: IUnknown//接口声明
    {
        virtual int Sub()=0;
        ...
    };
    CArithmetric
    {
        //外围类内容提要
         .....
         //-------------------
        class XAdd public:IAdd//嵌套类,实现接口
        {
            int Add();//对Add函数进行实现,Add直接访问外围类CArithmetric的数据成员计算和
        };
        public XAdd m_xAdd;//接口对象
         
        class XSub public:ISub//嵌套类,实现接口
        {
            int Sub();//对Add函数进行实现,Add直接访问外围类CArithmetric的数据成员计算和
        };
        public XSub m_xSub;//接口对象
    };CoCreateInstance(...,(void**)pIAdd)返回的就是指向m_xAdd的指针,void**就是指向IAdd了
      

  4.   

    CoCreateInstance(...,(void**)&pIAdd)
    &pIAdd指向基类IAdd,void**就也是就指向基类了