//聚合
//定义集合的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/*相应的参数列表*/)];
}