<b>自动化底子概念之"COM组件与接口"</b>[VC/C++编程]
本文“<b>自动化底子概念之"COM组件与接口"</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在前文,我预告了我将开始介绍WINX对自动化(Automation)的支持.首先我打算注释一下自动化(Automation)相关的概念.
我们会分为3个篇幅介绍:
·COM底子:COM组件(Component)与接口(Interface)
·变体(Variant)与IDispatch(Dispatch调用)
·自动化(Automation)、OA(Office Automation)、二次开辟接口(利用程序开辟接口,API)与范例库(TypeLib)
这是第一篇.
COM组件(Component)直观理解就是一个类,但这不是严谨的定义.缘由有二:
有的语言(比方C语言)没有类,但是它可以实现COM组件.
COM组件(Component)普通是一个类,但是它也大概是用多个类来实现.但是关于组件的客户而言,它是一个类,还是多个类举行实现,它不知道,也不关心.关于用多个类实现COM组件的具体内容,您可以理解一下COM组件中的“嵌套类实现COM接口(如MFC喜好的,ATL则偏向于用多重担当)”、“聚合(AGGREGATION)”方面的内容.
COM组件(Component)是一种基于二进制对象协议的概念.也可以理解为,这是一个二进制意义上的“类”.一个COM组件,对外表露的不是一组办法(Method),而是一组接口(Interface).
接口(Interface)这个概念被遍及用运,普通意义上说是指“类的规格(契约)”.从COM意义上理解接口(Interface),是一种和目前vtbl机制相容的二进制协议,并且vtbl的前三项与IUnknown接口相容(从担当角度上来说,可以理解为要求从IUnknown担当,但只是这样理解罢了).比方,你可以定义以下接口:
以下是引用片段:
interfaceIFoo:IUnknown
{
virtualvoid__stdcallfooA()=0;
virtualint__stdcallfooB(intarg1,intarg2)=0;
};
但是你也可以不这样写,而是这样纯C气势的:
以下是引用片段:
structIFooVtbl
{
HRESULT(__stdcall*QueryInterface)(void*pThis,constGUID*iid,void**ppv);
ULONG(__stdcall*AddRef)(void*pThis);
ULONG(__stdcall*Release)(void*pThis);
void(__stdcall*fooA)(void*pThis);
int(__stdcall*fooB)(void*pThis,intarg1,intarg2);
};
structIFoo
{
structIFooVtbl*vptr;
};
以上是“<b>自动化底子概念之"COM组件与接口"</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |