聚合 包容 COM

//聚合

 

//定义集合的CLSID和IID定义的头文件

#include "../MyAtl/ATLServer_i.c"


//初始化指针
    CMyMath():m_pITargetUnknown(0)
    {
    }

 

//得到关于GetControllingUnknown的编译器错误信息
    DECLARE_GET_CONTROLLING_UNKNOWN()

 



BEGIN_COM_MAP(CMyMath)

//将被集合的接口添加到接口映射中
    COM_INTERFACE_ENTRY_AGGREGATE(IID_ITarget, m_pITargetUnknown)
END_COM_MAP()




 
//覆盖FinalConstruct接口
    HRESULT FinalConstruct()
    {

       HRESULT hr = CoCreateInstance(CLSID_Target/*目标类的CLSID*/,
            GetControllingUnknown(),
            CLSCTX_INPROC_SERVER,
            IID_IUnknown/*目标类的IID_IUnknown*/,
            (void**)&m_pITargetUnknown);
        return S_OK;
    }


//释放被集合的组件

    void FinalRelease()
    {
        if(m_pIMathUnknwon)
            m_pITargetUnknown->Release();
    }

 

//定义目标接口的IUnknown接口指针

private:
    IUnknown* m_pITargetUnknown;

 

 

//包容

 

//导入包容类的头文件

#include “Target.h”



//在类声明中添加包容的接口
class ATL_NO_VTABLE CNowClass :
   ……,

   ……,

   public IMath


{

//初始化指针
public:
   CAdvancedMath() : m_pTarget( 0 )
   {
   }

 

//覆盖FinalConstruct接口

   HRESULT FinalConstruct()
   {
      HRESULT hr = CoCreateInstance( CLSID_Target,
                                0,
                                CLSCTX_INPROC_SERVER,
                                IID_ITarget,
                                (void**) &m_pTarget );       
      return hr;
   }

 


//释放被包容的组件
   void FinalRelease()
   {
      if ( m_pTarget )
         m_pTarget();
   }



BEGIN_COM_MAP(CNowClass)

    COM_INTERFACE_ENTRY(INowClass)
//响应包容的接口

   COM_INTERFACE_ENTRY(ITarget)
END_COM_MAP()




//定义目标接口的 指针
private:
   ITarget* m_pTarget;

};

//对包容的接口要添加使用方法

STDMETHOD(methodName)( parameter list);//声明

STDMETHODIMP CNowClass::methodName(parameter list)
{
   return
m_pTarget->xxx/*包容接口的方法*/(parameter list/*相应的参数列表*/)];
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值