聚合 包容 COM
2009-03-20 11:12
295 查看
//聚合
//定义集合的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/*相应的参数列表*/)];
}
//定义集合的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/*相应的参数列表*/)];
}
相关文章推荐
- COM 技术内幕学习之八(包容和聚合)
- 用MFC写的COM如何实现包容或聚合?
- COM“可重用性”的两种模型:包容和聚合
- COM复用的中Containment(包容)和Aggregation(聚合)的实现
- COM---组件复用:包容与聚合
- COM笔记-包容与聚合
- COM复用的中Containment(包容)和Aggregation(聚合)的实现
- COM笔记-包容与聚合
- COM 的聚合和包容
- COM的“可重用性”特性包括两种模型:包容和聚合
- 包容和聚合(COM技术内幕笔记五)
- COM笔记-包容与聚合
- 包容和聚合(COM技术内幕笔记五)
- COM技术内幕学习笔记---第八章---组件复用:包容和聚合
- COM学习笔记6_COM的复用:包容和聚合
- COM特性 包容和聚合
- COM特性 包容和聚合
- COM复习(一) : COM复用的中Containment(包容)和Aggregation(聚合)的实现
- COM技术内幕--包容和聚合
- <转载>com之包容聚合