ATL实战开发指南--活动模板库3.1
2014-05-17 22:40
190 查看
ATL的提出时基于这样一个理念:开发一种框架结构,使得通过它可以更加方便的建立小型的,快速的,基于COM的组件。
小型: 不必依赖于任何辅助的DLL文件,其中也包括标准C运行时的DLL。
快速:根据程序向导自动生成,当然这个是在Visual C++ 的Developer Studio IDE中才有的
基于COM组件: 对低级别的COM功能的内置式支持, 如IUnknown, 类工厂和自注册功能, 支持微软的接口定义语言, 提供了对自定义的
Vtable接口的调度支持, 以及通过类型库进行自描述的功能。
他还有以下功能:
ATL支持IDispatch 和 dual interfaces, 支持开发效率更高的ActiveX控件, 以及提供 基本的视窗功能的支持
ATL的不适用于创建有大量显示功能的组件。
那我们现在来看一下ATL的框架:
我们在前一章知道了:COM组件需要一个DLL或者EXE宿主,也需要一个类工厂, 同时也需要自注册,这些事每一个组件所必备的共同的东西。
1. ATL对组件的宿主支持:
ATL在它的CComModule类里封装了一个组件的宿主支持。它对开发者掩盖了两种宿主类(DLL和EXE)之间的大部分差别。向导程序也为你生成了宿主程序的代码。
2. 对IUnknown的支持
它也实现了IUnknown, 理解他的实现,对我们在程序中究竟用哪一个宏至关重要。
3. 对类工厂的支持
在ATL中也不必为你的组件实现类工厂。ATL在CComClassFactory里提供了对基本的类工厂的支持,通过CComClassFactory2对获得许可的类工厂提供了支持 (?)
并通过CComClassFactorysingleton为单元素类工厂提供了支持。我们可以在组件的实现中,添加ATL的宏来实现不同的功能。
4.对COM程序开发的其他方面的支持
使用Visual C++向导程序创建ATL工程:
(当然以后遇到某些问题,你还是需要知道向导程序到底为你做了些什么)下面是在vs2008环境下的操作
new project------Project type 下的Visual C++ 右边选择ATL project--然后next---在application setting页面下
上面三个是服务器的类型,这个我们前面几章提到的。上面勾DLL类型,下面Additional options有三项:
第一项: 如果你提供了参数在进程间调度(marshaling),该选项将使你的组件的宿主文件可以作为一个代理/占位DLL文件。
第二项:向导程序将为MFC的头文件添加#include, 同时也为MFC的CWinApp类添加附加的代码
第三项:我也不是很懂,这是摘抄过来的{COM+是什么?是微软提出的一种创建分布式应用程序的解决方法。分布式应用程序的特点是巨大,非常的复杂。但是任何分布式应用程序都需要解决一些共性问题,比如:安全、并发、网络传输的可靠性等。但是这些共性问题都是需要耗费极大的人力、物力、财力,而且最关键的是,绝大多数的项目开发队伍是不具备这种专业素质的。如何能够将项目开发人员的负担减少到最轻,使他们只需要考虑与业务相关的编码?很多大公司进行了这些探索,微软的解决方案就是COM+}
上面创建的起始工程仅仅为你的组件提供基本的宿主文件支持,你还需要添加COM对象。也可以通过Add--class--这里列出来了好多项,可以供你选择,这里根据需要我选择ATL simple object,然后弹出一个对话框:
Shot name;该项为该页面里的其他项提供了一个基础名称;或称为前缀。
Class : 该名称用在实现组件的C++类里
.h file and .cpp file; 组件类的头文件和实现文件
CoClass; COM类的名称。外部的客户程序使用该名称来描述组件的类型。就像之前的CMath
Interface ; 为你的对象所创建的接口名称。就像之前的IMath 、IAdvancedMath
Type; 放置在注册表里的可读的组件名称。
ProgID; 这是组件的一个标识符,该标识符是在程序里使用的。客户程序可以使用该标识符来定位并实现一个组件
然后在next后:
这里先简单介绍一下概念,以后细讲:
Threading model:
Single: 组件的实例只能在某一进程里的主线程里创建
Apartment: 组件的实例可以存在它们自身的单元(Apartment)线程里
Free: 它必须和其它线程一起位于多线程单元里
Both: 支持Free 和 Apartment线程模型
Interface:
custom: 就是2.1和2.2里提到的标准Vtable接口
dual: 微软推荐组件支持dual接口。因为它既实现了一个Vtable接口, 也实现了标准的自动化接口(Standard Automation Interface)
Aggregation:
使得组件可以兼并或复用其它组件的功能。
Support :
ISupporErrorInfo :这种设置提供了一个具有鲁棒性的、服务器到客户机的错误汇报机制
Connection points: 连接点使一个客户程序和服务器程序在对等的基础上彼此进行通讯。
小型: 不必依赖于任何辅助的DLL文件,其中也包括标准C运行时的DLL。
快速:根据程序向导自动生成,当然这个是在Visual C++ 的Developer Studio IDE中才有的
基于COM组件: 对低级别的COM功能的内置式支持, 如IUnknown, 类工厂和自注册功能, 支持微软的接口定义语言, 提供了对自定义的
Vtable接口的调度支持, 以及通过类型库进行自描述的功能。
他还有以下功能:
ATL支持IDispatch 和 dual interfaces, 支持开发效率更高的ActiveX控件, 以及提供 基本的视窗功能的支持
ATL的不适用于创建有大量显示功能的组件。
那我们现在来看一下ATL的框架:
我们在前一章知道了:COM组件需要一个DLL或者EXE宿主,也需要一个类工厂, 同时也需要自注册,这些事每一个组件所必备的共同的东西。
1. ATL对组件的宿主支持:
ATL在它的CComModule类里封装了一个组件的宿主支持。它对开发者掩盖了两种宿主类(DLL和EXE)之间的大部分差别。向导程序也为你生成了宿主程序的代码。
2. 对IUnknown的支持
它也实现了IUnknown, 理解他的实现,对我们在程序中究竟用哪一个宏至关重要。
3. 对类工厂的支持
在ATL中也不必为你的组件实现类工厂。ATL在CComClassFactory里提供了对基本的类工厂的支持,通过CComClassFactory2对获得许可的类工厂提供了支持 (?)
并通过CComClassFactorysingleton为单元素类工厂提供了支持。我们可以在组件的实现中,添加ATL的宏来实现不同的功能。
4.对COM程序开发的其他方面的支持
ActiveX控件 | CcomControl、IoleControlImpl、IoleObjectImpl等都支持控件的开发。IPropertyPageImpl、ISpecifyPropertyPageImple支持属性页面 |
自动化(Automation) | IDispatchImpl处理自动化和双向接口 |
COM的数据类型 | CComBSTR和CComVariant |
接口指针的管理 | CComPtr 和 CComQIPtr |
错误处理 | ISupportErrorInfoImpl 和CComObject |
连接点(connection points) | IConnectionPointContainerImpl和IConnectionPointImpl |
异步属性下载 | CBindStatusCallback |
自注册 | ATL的注册对象(Registrar object、Iregistrar)为你的组件提供自注册功能 |
视觉和对话框 | Cwindow、CwindowImpl、CDialogImpl和CmessageMap |
COM的功能项 | ATL的支持类 |
(当然以后遇到某些问题,你还是需要知道向导程序到底为你做了些什么)下面是在vs2008环境下的操作
new project------Project type 下的Visual C++ 右边选择ATL project--然后next---在application setting页面下
上面三个是服务器的类型,这个我们前面几章提到的。上面勾DLL类型,下面Additional options有三项:
第一项: 如果你提供了参数在进程间调度(marshaling),该选项将使你的组件的宿主文件可以作为一个代理/占位DLL文件。
第二项:向导程序将为MFC的头文件添加#include, 同时也为MFC的CWinApp类添加附加的代码
第三项:我也不是很懂,这是摘抄过来的{COM+是什么?是微软提出的一种创建分布式应用程序的解决方法。分布式应用程序的特点是巨大,非常的复杂。但是任何分布式应用程序都需要解决一些共性问题,比如:安全、并发、网络传输的可靠性等。但是这些共性问题都是需要耗费极大的人力、物力、财力,而且最关键的是,绝大多数的项目开发队伍是不具备这种专业素质的。如何能够将项目开发人员的负担减少到最轻,使他们只需要考虑与业务相关的编码?很多大公司进行了这些探索,微软的解决方案就是COM+}
上面创建的起始工程仅仅为你的组件提供基本的宿主文件支持,你还需要添加COM对象。也可以通过Add--class--这里列出来了好多项,可以供你选择,这里根据需要我选择ATL simple object,然后弹出一个对话框:
Shot name;该项为该页面里的其他项提供了一个基础名称;或称为前缀。
Class : 该名称用在实现组件的C++类里
.h file and .cpp file; 组件类的头文件和实现文件
CoClass; COM类的名称。外部的客户程序使用该名称来描述组件的类型。就像之前的CMath
Interface ; 为你的对象所创建的接口名称。就像之前的IMath 、IAdvancedMath
Type; 放置在注册表里的可读的组件名称。
ProgID; 这是组件的一个标识符,该标识符是在程序里使用的。客户程序可以使用该标识符来定位并实现一个组件
然后在next后:
这里先简单介绍一下概念,以后细讲:
Threading model:
Single: 组件的实例只能在某一进程里的主线程里创建
Apartment: 组件的实例可以存在它们自身的单元(Apartment)线程里
Free: 它必须和其它线程一起位于多线程单元里
Both: 支持Free 和 Apartment线程模型
Interface:
custom: 就是2.1和2.2里提到的标准Vtable接口
dual: 微软推荐组件支持dual接口。因为它既实现了一个Vtable接口, 也实现了标准的自动化接口(Standard Automation Interface)
Aggregation:
使得组件可以兼并或复用其它组件的功能。
Support :
ISupporErrorInfo :这种设置提供了一个具有鲁棒性的、服务器到客户机的错误汇报机制
Connection points: 连接点使一个客户程序和服务器程序在对等的基础上彼此进行通讯。
相关文章推荐
- ATL实战开发指南---2.2
- ATL实战开发指南---2.4
- ATL实战开发指南笔记-----2.1
- ATL实战开发指南---2.3
- ATL实战开发指南-----2.5
- 实战:Android活动目录LiveFolder开发
- Mini2440 Linux移植开发实战指南——移植Nand驱动并更改分区信息
- ATL开发指南第三章笔记
- ATL开发指南学习笔记: COM与C++的VTable(虚拟表)
- 【转】Vista下玩转php开发 IIS7下安装配置php实战指南
- [置顶] PHP开发实战权威指南-读书总结
- MFC程序员的WTL开发指南之ATL界面类
- 嵌入式开发入门实战开放体验日活动,抢报中!
- 《国内首部基于JBPM5.4实战流程引擎开发(动态表单、模板引擎、公文管理系统)》
- PHP开发实战权威指南-读书总结
- PHP开发实战权威指南-读书总结
- 实战:Android活动目录LiveFolder开发
- ATL/COM 活动模板库学习步骤(转载)
- 《嵌入式系统Linux内核开发实战指南(ARM平台)》书评
- nandflash驱动移植-《Mini2440_Linux移植开发实战指南》