ATL实战开发指南--活动模板库3.1
来源:互联网 发布:第七封印知乎 编辑:程序博客网 时间:2024/05/23 00:07
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程序开发的其他方面的支持
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和CmessageMapCOM的功能项 ATL的支持类使用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: 连接点使一个客户程序和服务器程序在对等的基础上彼此进行通讯。
- ATL实战开发指南--活动模板库3.1
- ATL实战开发指南---2.2
- ATL实战开发指南---2.3
- ATL实战开发指南---2.4
- ATL实战开发指南-----2.5
- ATL实战开发指南笔记-----2.1
- ATL/COM 活动模板库学习步骤
- ATL/COM 活动模板库学习步骤
- ATL/COM 活动模板库学习步骤
- ATL/COM 活动模板库学习步骤
- ATL/COM 活动模板库学习步骤(转载)
- 读《ATL开发指南》p25感想
- Handlebars模板开发指南
- ATL 模板
- 实战:Android活动目录LiveFolder开发
- 实战:Android活动目录LiveFolder开发
- 新版《Windows Sysinternals实战指南》,读书积赞活动
- 揭晓新版《Windows Sysinternals实战指南》读书积赞活动
- Linux tip: Bash parameters and parameter expansions
- 哈佛幸福课推荐书目
- Go 语言方法接受者类型的选择
- 心理们-位大师的50本书
- Go 语言中的方法,接口和嵌入类型
- ATL实战开发指南--活动模板库3.1
- Ant构建Java项目之第1篇
- 内存映射文件原理探索
- 前言
- [转] 张亚勤:网络是泡沫吗?(2001年微软亚洲研究院院长话题)
- photoshop使用总结-高度浓缩
- printwriter类——可用于多种输出对象,具有多种输出方式
- qooxdoo通用javascript框架手册(六)
- 求职经验