在看《COM技术内幕》,看到接口的聚合。看了三边,虽然懂了一些,不过还是没有到游刃有余的地步。希望高手指点,让我早登高楼,谢谢。

解决方案 »

  1.   

    可参考
    http://expert.csdn.net/Expert/topic/2305/2305025.xml?temp=.4171106
      

  2.   

    <COM原理及应用>讲得很清楚,就是通过委托对象来处理,因为支持聚合对于COM对象是有要求的,具体的内容还是自己看看潘老师的的那本书好了
      

  3.   

    COM聚合是一项复用技术,类似与继承。聚合对于COM实现方比较简单,只是在创建COM对象的同时也为你创建了另外一个COM对象,但是这两个COM对象必须满足COM的协议,在CLIENT方感觉就好象是一个对象一样。如下:
    class CObj1 : public IUnknown
    {
       CObj1()
       {
       }
       virtual ~CObj1()
       {
        }
       ULONG AddRef()
       {...};
       ULONG Release()
       {...};
       HRESULT QueryInterface()
       {...};
       HRESULT Method1()
       {
         return S_OK;
       }
    }class CObj2 : public IUnknown
    {
       CObj1 *pObj;              //this object is aggregated
       CObj2()
       {
           pObj1 = new CObj1;
       }
       CObj2()
       {
           delete pObj1;
       }
       ULONG AddRef()
       {...}
       ULONG Release()
       {...}    
       HRESULT QueryInterface()
       {...};
       HRESULT Method2()
       {
          return S_OK;
       }
    }CLIENT:void main()
    {
       CObj2 *pInterface;
       HRESULT hr = ::CoCreateInstance(........,(VOID **)&pInterface);
       if(SUCCEEDED(hr))
       {
            pInterface->Method2();
            CObj1 *pInternface1;
            hr = pInterface->QueryInterface((void **)&pInternface1); //注意,这里同使用                                                                 //一个COM对象是一样的  
            if(SUCCEEDED(hr))
            {
                 pInterface1->Method1();
                 pInterface1->Release();
            }
            pInterface->Release();
        }
    }
        
    当然在MFC和ATL中不是这样来实现的,但思想是一致的。