ATL接口映射宏详解

ATL接口映射宏详解

ID:37917968

大小:64.69 KB

页数:36页

时间:2019-06-02

ATL接口映射宏详解_第1页
ATL接口映射宏详解_第2页
ATL接口映射宏详解_第3页
ATL接口映射宏详解_第4页
ATL接口映射宏详解_第5页
资源描述:

《ATL接口映射宏详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ATL接口映射宏详解序言:  这几天看了看ATL的接口映射宏,不知不觉看得比较深入了,突然就萌发了把它写出来的想法。ATL中定义了很多接口映射宏,有几个还是比较重要的,虽然好象没有必要把它所有的细节都弄得很清楚,但深入学习的过程中也可以顺带学一学其他的ATL类,对它的机制也可以更清楚一些,应该还是会有些好处的吧。我按照我学习的过程把它写出来,也不知道大家能不能看懂。想模仿一下侯老师的手笔力争把其内部细节解释清楚,但也不敢大言不惭的美其名曰“深入浅出”,呵呵,只希望能对大家有所帮助了。  以后将分别介绍ATL中各

2、个形式为COM_INTERFACE_ENTRY_XX的接口映射宏并将按照从易到难的顺序讲解,每一部分都将建立在前一部分的基础上。每一部分都将通过分析实际的调用函数堆栈来进行分析,堆栈的写法是从下向上。文中所涉及的代码都为略写,只列出相关部分。  一、COM_INTERFACE_ENTRY(x)  首先我们从一个最典型的应用开始:  定义一个最简单的ATLDLL:classATL_NO_VTABLECMyObject:publicCComObjectRootEx,publicCComCoClass,publicI

3、DispatchImpl{    .....    BEGIN_COM_MAP(CMyObject)        COM_INTERFACE_ENTRY(IMyObject)//一个双接口        COM_INTERFACE_ENTRY(IDispatch)    END_COM_MAP()    .....};  编写一段最简单的查询接口代码:IUnknown*pUnk;IMyObject*pMyObject;CoCreateInstance(CLSID_MyObject,NULL,CLSCTX_IN

4、PROC_SERVER,IID_IUnknown,(void**)&pUnk);pUnk->QueryInterface(IID_IMyObject,(void**)&pMyObject);  执行客户代码,首先我们看看组件对象是如何被创建的。  函数调用堆栈一:  4...........  3.ATL::CComCreator>::CreateInstance(...)  2.ATL::CComCreator2

5、:CComObject>,          ATL::CComCreator>>::CreateInstance(...)  1.ATL::CComClassFactory::CreateInstance(...)  4.ATL::AtlModuleGetClassObject(...)  9.ATL::AtlInternalQueryInterface(...)  8.ATL::CComObjectRootBase::Inte

6、rnalQueryInterface(...)  7.ATL::CComClassFactory::_InternalQueryInterface(...)  6.ATL::CComObjectCached::QueryInterface(...)  5.ATL::CComCreator>::  CreateInstance(...)  4.ATL::AtlModuleGetClassObject(...)  3.ATL::CComModule::GetClassObject(...)  2.DllGetCla

7、ssObject(...)  1.CoCreateInstance(...)(客户端)  解释如下:1:CoCreateInstance(CLSID_MyObject,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,(void**)&pUnk);其内部将调用OLEAPI函数CoGetClassObject(),而CoGetClassObject则会通过LoadLibrary(...)装入DLL,并调用DLL中的DllGetClassObject()函数。2:STDAPIDllGet

8、ClassObject(REFCLSIDclosed,REFIIDrid,LPVOID*pip){    return_Module.GetClassObject(closed,rid,pip);}  其中值得注意的是_Module变量,在DLL中定义了全局变量:  CComModule_Module;  ATL通过一组宏:BEGIN_OBJECT_MAP(ObjectMap)    

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。