浅谈ATL(一)

浅谈ATL(一)

作为Atl/COM/Activex的小斑竹,很想提高我们板块的人气,写点文章来吸引更多的想学COM的新手。天天都会看到一些新手对参数传递如自定义结构类型、数组、接口等参数类型出现的问题。这篇文章主要让一些惧怕COM的新手知道该掌握什么基础知识,让他们知道用什么做COM组件最简单,使他们对ATL有个大概的认识。

什么是ATL

ATL(活动模板库,Active Template Library)是专门用来开发COM组件的模板库,当前最新版本是ATL7.1(随.net发布),它修改了前版本ATL3.0(随Visual C++6.0发布)一些BUG

学习ATL需要必备什么的背景知识?

1、  COM基础。因为ATL是针对COM的,所以扎实的COM知识可以助你一臂之力。最好看看《COM本质论》。

2、  C++模板知识。

3、  Windows基础知识,特别是Win32中有关窗口部分的知识。因为ATL对用户界面(UI)封装的很浅,往往创建一个窗体和处理一个消息要比MFC复杂得多。

4、  STL知识。ATLSTL在数据集合管理上有相通之处,如果你有STL做基础,那么理解ATL中的集合和枚举应该是轻松自如。

怎么看ATL?

有一定基础C++程序员都用过STL,它使我们节省了不少时间它给我们封装了vectorlistqueue等,还有一些泛型算法。以前我们有些人可能大多数都对它有所怀疑,可到现在他得到了我们的肯定。ATL对应于COM,虽然刚出来时BUG多多,现在atl7.1BUG已经很少了!我们可以放心使用了。有些人肯定看过don box的《com本质论》,看完以后肯定会说原来写个COM组件这么麻烦呀!最主要的就是注意引用计数,还有那么多分不清的GUID。甚至刚学COM的都不知道怎么创建一个新的GUID,也不了解他们都是什么用处。更别说还要创建个类厂,这东东可能把一批想学COM的吓跑了,COM这方面的资料也很少,有几本好书都是讲理论知识想看着出做几个例子简直就是老虎吃天!如果用ATL创建一个组件或者控件是很简单的,用向导不到一分钟就可以完成,哈哈!有一本《深入解析ATL》这本书值得你一看。有些人肯定会说MFC也可以快速的创建一个控件,对的,如果你想深入到底层感觉还是多用ATL它会让你更多的掌握COM的精髓所在。我现在用的是ATL7.1做组件,可以在vb6,vc7下用不用加任何.net库的支持。

ATL的缺点在哪里呢?

ATL的缺点在对窗体的支持,它只封装了一写最基本的功能,几乎所有控件都要通过Win32窗口的api来完成。我就吃过苦头,要创建一个combox那可能要浪费点时间了。不过这样也能让你体验一下直接用api创建快感(灵活性很大)。如果你要做一个组件或者开发包最要不要带界面除非不得已。不要窗体的好处很多,一个是灵活性大,客户可根据自己的风格编写界面(客户很讨厌开发包或者控件那些讨厌的对话框和怪异按钮等)。另一个好处就是,如果你的开发包中都是纯的接口(没有界面的接口),可以很方便在接口之间传递自定义结构。我看过很多别人写的控件(或者COM组件),调用一个接口方法十几个参数,而且让客户要花费很长时间学习它的文档(因为它们的参数莫名其妙,eg:Create(BSTR str))。我们做出来控件或者COM开发包目的是给客户用的,可是我们还要保证它用起来简单灵活,尽量使客户已看就能用的地步。我想很多人都愿意用自定义结构吧!因为它可以在客户端直接定义直接用。不过大家要注意了,传递结构的时候不管是[in]还是[out]属性都要传递指针,原因很简单interface 就可以说是 struct(当然它们时有区别的)。Interface是虚的而struct不是。

先写到这里,下篇会讲点实际的东西。说的不对的地方请大虾们提出来,我们共同探讨。我的msn: wangweixing2003@hotmail

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
中文名: 深入解析ATL(第2版) 原名: ATL Internals, 2nd Edition Working with ATL 8 别名: ATL 作者: (美)塔瓦瑞斯译者: 赖仪灵 曹雨田 资源格式: PDF 版本: 扫描版 出版社: 电子工业出版社书号: 9787121049859发行时间: 2007年11月01日 地区: 大陆 语言: 简体中文 简介: 编辑推荐 ATL的发明人Jim Springfield亲自作序推荐。   四位顶尖的Windows编程专家倾力合作,绝对经典再现。   COM、ATL开发人员的必备宝典。   深入分析ATL实现COM内幕细节,展示COM应用中的各类漂亮技巧。   ATL的经典指南现已更新到ATL 8和VisuaI Studio 2005:   四位顶尖的Windows编程专家在本书中系统地揭示了ATL的内部工作原理,他们解释了ATL是 如何工作的,以及为什么要以这样的方式工作。通过本书,客户端开发人员可以掌握ATL中的窗口、COM控件、MFC集成、Web服务代理生成等资源。服务端编程人员可以应用ATL的全COM服务器和对象服务、高吞吐量、高并发Web应用程序和服务的广泛支持。每个Windows开发人员都将从本书中学到强大的方法来增加应用程序的灵活性、减少负载、最大化程序的透明度和可控性。   ·通过图表、示例代码和ATL的内部实现代码来揭密ATL的内部原理。   ·遍历向导以简化在普通应用程序中的ATL开发。   ·掌握C++、COM和ATL中的字符串使用技巧。   ·利用ATL的智能类型:CComPtr、CComQIPtr、CComBSTR和CComVariant。   ·理解并正确实现IUnknown。   ·创建能从COM服务器中暴露COM对象的粘合代码。   ·使用Canned Interface实现来支持对象的永久性、COM集合、枚举器和连接点。   ·使用ATL窗口类和控件建立独立的应用程序和UI组件。   ·使用ATL Servet开发可以运行在微软IIS上的Web应用程序。 虽然.NET系统从1998年才开始其发展进程。但它已经使很多开发人员的编程发生了革命性的变化,并在未来几年将持续得到改进。但是,COM编程(和 ATL)也依然非常有活力,对Microsoft内外的很多开发人员都非常重要。本书的第2版,与第1版一样,提供了您所需要的信息,使我们在这些技术上的投资也将获得最大的回报。                        ——Jim Springfield,ATL发明人 虽然ATL比较精深,但是这本书的讲解非常通俗易懂,语言比较简练,条理非常清楚。即使在读完这本书之后,它仍然可以作为参考书指导我们的开发和学习工作。我想,这就是好书的价值所在吧。            ——潘爱民,经典畅销书《深入解析Windows操作系统,第4版》译者 内容简介 本书主要介绍了ATL技术的原理、内部实现和应用技巧,由当今4 位顶尖的 Windows技术专家联合撰写。全书内容丰富,深入浅出,主要涵盖了ATL内部架构和实现方法、运用向导简化ATL开发、C++/COM/ATL中字符串的使用技巧、理解并正确实现IUnknown、充分利用ATL提供的Smart Types、撰写能够暴露COM服务器上COM对象的粘合代码、利用Canned Interface实现来支持对象持久化/COM群集/枚举、利用ATL Windows类建构独立的应用程序和UI组件等的技术内容。本书适合于广大Windows开发人员阅读参考,是ATL开发人员的必备权威参考书籍。 作者简介 Christopher Tavares,目前在微软工作,是模式与实践方面的专家。有着超过25年的编程经验,涉及的平台从Sinclair ZX-81到多CPU信号处理硬件。 目录: 第2版序 第1版序 前言 致谢 关于作者 联系博文视点 第1章 你好,ATL 1.1 什么是ATL 1.2 创建COM服务器 1.3 插入COM类 1.4 添加属性和方法 1.5 实现附加接口 1.6 脚本支持 1.7 添加永久性 1.8 添加和激发事件 1.9 使用窗口 1.10 COM控件 1.11 容纳控件 1.12 ATL Server Web项目 1.13 总结 第2章 字符串和文本 2.1 字符串数据类型、转换类和辅助函数 2.2 智能BSTR类CComBSTR 2.3 CComBSTR类 2.4 CString类 2.5 总结 第3章 ATL智能类型 3.1 智能VARIANT类CComVariant 3.2 智能SAFEARRAY类CComSafeArray 3.3 智能指针类CComPtr和CComQIPtr 3.4 智能指针类CAutoPtr和CAutoVectorPtr 3.5 ATL内存管理器 3.6 总结 第4章 ATL中的对象 4.1 实现IUnknown 4.2 ATL的层次 4.3 线程模型支持 4.4 IUnknow核心 4.5 我们的类 4.6 CComObject以及其他 4.7 ATL创建者 4.8 调试 4.9 总结 第5章 COM服务器 5.1 回顾COM服务器 5.2 对象映射表和CAtlModule类 5.3 对象映射表 5.4 对象映射类要求的方法 5.5 CAtlModule类 5.6 重游CComCoClass 5.7 ATL与C运行时库 5.8 总结 第6章 接口映射表 6.1 回顾:COM的实体身份 6.2 表驱动的QueryInterface 6.3 多重继承 6.4 Tear-off接口 6.5 聚合:外部控制对象 6.6 接口映射表链 6.7 尽管说“不” 6.8 调试 6.9 扩展性 6.10 总结 第7章 ATL中的永久性 7.1 回顾COM的永久性 7.2 ATL的永久性实现类 7.3 属性映射表 7.4 永久性实现 7.5 其他永久性实现 7.6 使用永久性添加“按值列集”的语义 7.7 总结 第8章 集合和枚举器 8.1 COM集合和枚举接口 8.2 枚举数组 8.3 枚举标准的C++集合 8.4 集合 8.5 ATL数据类型的标准C++集合 8.6 ATL集合 8.7 对象模型 8.8 总结 第9章 连接点 9.1 回顾连接点 9.2 创建基于ATL的可连接对象 9.3 创建一个接收事件的对象 9.4 它是怎么工作的:杂乱的实现细节 9.5 总结 第10章 窗口 10.1 Windows应用程序的结构 10.2 CWindow 10.3 CWindowImpl 10.4 CDialogImpl 10.5 Windows控件包装类 10.6 CContainedWindow 10.7 总结 第11章 ActiveX控件 11.1 回顾ActiveX控件 11.2 BullsEye控件需求 11.3 使用ATL向导创建初始的控件 11.4 初始的BullsEye源文件 11.5 逐步开发BullsEye控件 11.6 总结 第12章 控件包容 12.1 控件是如何被包容的 12.2 基本的控件包容 12.3 在对话框中容纳控件 12.4 复合控件 12.5 HTML控件 12.6 ATL控件包容的限制 12.7 总结 第13章 你好,ATL Server:一个新型的C++ Web平台 13.1 微软Web平台(因特网信息服务) 13.2 可能是可以运行的最简单ISAPI扩展 13.3 封装ISAPI 13.4 ATL Server 13.5 ATL Server中的Web服务 13.6 总结 第14章 ATL Server内幕 14.1 ATL Server中的ISAPI实现 14.2 服务器响应文件 14.3 请求处理程序示例 14.4 输入处理 14.5 会话管理 14.6 数据缓存 14.7 总结 附录A 实例展示C++模板 A.1 模板的必要性 A.2 模板基础 A.3 不同类型的多态 A.4 函数模板 A.5 成员函数模板 A.6 总结 附录B ATL头文件 附录C 移植到ATL 8 C.1 字符串、字符集和转换 C.2 与MFC共享的类 C.3 实现COM服务器 C.4 ActiveX控件和控件容纳 C.5 ATL_MIN_CRT变化 C.6 总结 附录D 属性化ATL D.1 ATL Attributes的基础 D.2 属性化ATL的未来 D.3 总结 索引

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangweixing2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值