ATL接口映射宏详解C言语教程-C / C++-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝32
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:333回复:0

  ATL接口映射宏详解C言语教程

楼主#
更多 发布于:2016-05-31 16:38

这几天看了看ATL的接口映射宏,不知不觉看得对比深入了,俄然就萌发了把它写出来的想法。ATL中界说了很多接口映射宏,有几个仍是对比主要的,尽管好象没有必要把它所有的细节都弄得很明白,但深入学习的进程中也能够顺带学一学别的的ATL类,对它的机制也能够更明白一些,应当仍是会有些优点的吧。我依照我学习的进程把它写出来,也

不知道大家能不能看懂。想仿照一下侯教师的手笔力求把其内部细节解说明白,但也不敢大吹牛皮的美其名曰“深入浅出”,呵呵,只希望能对大家有所协助了。

今后将别离介绍ATL中各个方式为COM_INTERFACE_ENTRY_XX的接口映射宏并将依照从易到难的次序解说,每一有些都将树立在前一有些的基础上。每一有些都将经过剖析实践的调用函数仓库来进行剖析,仓库的写法是从下向上。文中所触及的代码都为略写,只列出有关有些。

一、COM_INTERFACE_ENTRY(x)

首要咱们从一个最典型的使用开端:

界说一个最简略的ATL DLL:

class ATL_NO_VTABLE CMyObject :

public CComObjectRootEx,

public CComCoClass,

public IDispatchImpl

{

.....

BEGIN_COM_MAP(CMyObject)

COM_INTERFACE_ENTRY(IMyObject) //一个双接口

COM_INTERFACE_ENTRY(IDispatch)

END_COM_MAP()

.....

};

编写一段最简略的查询接口代码:

IUnknown *pUnk;

IMyObject *pMyObject;

CoCreateInstance(CLSID_MyObject, NULL,

CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnk);

pUnk->QueryInterface(IID_IMyObject, (void

**)&pMyObject);

履行客户代码,首要咱们看看组件对象是如何被创立的。

函数调用仓库一:

4...........

3.ATL::CComCreator< ATL::CComObject<

CMyObject > >::CreateInstance(...)

2.ATL::CComCreator2< ATL::CComCreator<

ATL::CComObject< CMyObject > >,

ATL::CComCreator< ATL::CComAggObject<

CMyObject > > >::CreateInstance(...)

1.ATL::CComClassFactory::CreateInstance(...)

4.ATL::AtlModuleGetClassObject(...)

9.ATL::AtlInternalQueryInterface(...)

8.ATL::CComObjectRootBase::InternalQueryInterface(...)

7.ATL::CComClassFactory::_InternalQueryInterface(...)

6.ATL::CComObjectCached::QueryInterface(...)

5.ATL::CComCreator >::

CreateInstance(...)

4.ATL::AtlModuleGetClassObject(...)

3.ATL::CComModule::GetClassObject(...)

2.DllGetClassObject(...)

1.CoCreateInstance(...)(客户端)

解说如下:

1:

CoCreateInstance(CLSID_MyObject, NULL,

CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&pUnk);

其内部将调用OLE API函数CoGetClassObject(),

而CoGetClassObject则会经过 LoadLibrary(...)装入DLL,并调用DLL中的DllGetClassObject()函数。

优质IT资源分享社区为你提供此文。

本站有大量优质C、C++教程视频,资料等资源,包含C,C++基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看。

C、C++教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客