COM学习笔记(九):包容
来源:互联网 发布:淘宝情趣女模特都有谁 编辑:程序博客网 时间:2024/06/10 07:15
//Component1是一个实现了两个接口IX和IY的外部组件,但它复用了组件2---组件1所包容的一个内部组件---对IY的实现。
class CA : public IX,public IY{
public:
virtual HRESULT __stdcall QueryInterface(const IID& iid,void** ppv);
virtual ULONG __stdcall AddRef();
virtual ULONG __stdcall Release();
virtual void __stdcall Fx(){cout<<"Fx"<<endl;}
virtual void __stdcall Fy(){m_pIY->Fy();}
CA();
~CA();
HRESULT Init();
private:
long m_cRef;
IY* m_pIY;
};
CA::CA():m_cRef(1),m_pIY(NULL){
InterlockedIncrement(&g_cComponents);
}
CA::~CA(){
InterlockedDecrement(&g_cComponents);
trace("Destroy self.");
if(m_pIY != NULL) m_pIY->Release();
}
HRESULT CA::Init(){
trace("Create Contained component.");
HRESULT hr = ::CoCreateInstance(CLSID_Component2,NULL,CLSCTX_INPROC_SERVER,IID_IY,(void**)&m_pIY);
if(FAILED(hr)){
trace("Could not create contained component.");
return E_FAIL;
}
else{
return S_OK;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//外部组件的类厂调用新创建组件上的Init()函数
HRESULT __stdcall CFactory::CreateInstance(IUnknown* pUnknown,const IID& iid,void** ppv){
if(pUnknown != NULL) return CLASS_E_NOAGGREGATION;
CA* pA = new CA;
if(pA == NULL) return E_OUTOFMEMORY;
HRESULT hr = pA->Init();
if(FAILED(hr)){
pA->Release();
return hr;
}
hr = pA->QueryInterface(iid,ppv);
pA->Release();
return hr ;
}
//包容的一个主要用途是通过给已有的接口加上一些代码以扩展此接口。
- COM学习笔记(九):包容
- com学习笔记(7)包容与聚合
- COM笔记-包容与聚合
- COM笔记-包容与聚合
- COM笔记-包容与聚合
- COM学习笔记6_COM的复用:包容和聚合
- COM技术内幕学习笔记---第八章---组件复用:包容和聚合
- 包容和聚合(COM技术内幕笔记五)
- COM 技术内幕学习之八(包容和聚合)
- 聚合 包容 COM
- COM对象包容
- COM 的聚合和包容
- COM特性 包容和聚合
- COM特性 包容和聚合
- COM原理之包容与聚合
- Inside COM读书笔记-----包容和聚合
- COM技术内幕--包容和聚合
- COM---组件复用:包容与聚合
- NSTimer与Run loop Modes
- 有些东西不能说的
- Spring MVC 3 深入总结
- iOS开发常用的宏
- nodejs使用kraken 搭建web工程
- COM学习笔记(九):包容
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 用$传参时,直接将参数的值放在sql语句中,如:
- excel 单元格分列和合并
- 二维数组环形打印,亲自调试
- kettle的job中使用循环
- Linux 上多条对外连线(Multi-Path)实作------带宽负载平衡
- 扩展欧几里德算法
- windows下jmeter安装配置
- 写出健壮的Bash脚本