前言
前一阵子初接触ATL,找了好久都没找到一本好的教材。偶然找到一本<ATL简明教程>可惜是EN的。对于english不太好的初学者来说,实在有点难啊。。。于是,我决定将它翻译后献给大家,希望有人会喜欢:)如果有译得不好的地方,敬请批评指正! 由于时间有限,我将会每天翻译一部分,还请您耐心等待哟!
第一部分:ATL概述
一、ATL的组成部分1、ATL的简要历史 ATL本来被设计成一种书写快捷的小的COM组件。最初是打算给自动控制使用的,比如说实现事务规则和多层结构的数据库访问。 在它的第一个版本中,ATL没有任何的便利可言,因为它没有用户接口--ATL 1.0没有可视化ActiveX控件,举例来说(C++中使用ATL与不使用它相比,都差不多要做同样多的工作。)2.0版增加了建立可视化的ActiveX控件所需的模板。我们将会在以后讨论ActiveX控件。2、ATL的特性 ATL的几个重要特性包括: ◆C++能完成的所有功能。 ◆没有外部程序库,除非你想要使用它。 ◆一种抽象对象和接口的相对高级的方式。 ◆类集合的自动处理,目标创建,参考计算和查询界面。 ◆标准接口的实现。 最后一点,也是最重要的一点:用C++写一个独立的ActiveX控件,你必须亲自书写实现每个接口的每种方法。而且由于是可视化ActiveX控件,至少是超过一打的接口。没有任何可用的方法可以帮助你要尝试解决的问题,但是你无论如何也必须正确的去写这些琐碎的方法(代码)。
3、可选择性 那就是为什么MFC,Visual Basic,Visual J++,Visual FoxPro, 和Delphi对于写ActiveX控件是如此流行的原因:它们在运行时能为你提供数十个各种各样的控件的接口,使你能专注于手边的问题。 但是使用这些技术来实现你的ActiveX控件并不划算:这些东西在运行时要达到一种程度或者另外一种程度,那它将会变得又大又慢。如果你想要你的控件小而且快的话,你可以在C++中直接用ATL实现它们。
4、理想的速度 ATL怎样提供小而且精简的代码?首先,它全然没有依赖外部运行库--因此如果你的代码要用到它的时候,控件仅仅在运行时使用唯一的一次外部程序库;其次,通过不可思议的模板,ATL控件仅包含了一些实际需要的代码。因此C++中ATL控件无论在大小还是速度上都绝对比得上COM。但是它更比COM更简单。
5、代码的重用 微软基础类的主要开发者之一McCrory院长经常说,使用MFC的好处之一就是代码的重用,而且你不能改写或者是调试它。因此MFC事实是一个可以让你预览的免费版--这使你少写几千行代码。而且它使得在编辑器里面对象的连接与嵌入变得相当容易,因为你不用去写这数千行代码。 代码的测试和调试是相当重要的。现在,没有一个库是完美的。但是,一个成熟的库的代码是由许许多多的程序员使用并测试通过了的。假如你恰好是一个程序员,类库可能比你自己写的代码更稳定更快速。它们基本上浓缩了所有开发者的专业知识,而且允许你在此基础上自由的使用它。
6、模板 模板库描述了比函数库或者类库更多种类的重用代码。首先,重用模板的意思是直接重用源代码。那意味着你能在你的程序里面自由的更改它,以使它变得更有效率。同样也意味着,如果你在模板库中发现了一个bug,你就能由此修正这个bug。你不一定要重建MFC或界面并且发布新的副本。仅需要使用新的模板就可以建立下一个版本而不会有更多的漏洞。 如果你不介意重新发布你的源代码,模板库能为你提供所有世界上最好的东西:重用别人的代码所完成的功能和效率就象使用自己写的代码一样。
******************************************************************************************************
7、我们的ATL组成 我们的ATL的组成这一部分将非常简单:当你使用一个现成的方法的时候,别忘了要保持事物的趣味的话,别等它已经过时了才发现。 既然ATL的固有的单线程还流行,那么我们就要去开发它,不过我们将会给它一个双重的接口,以便它能被任何使用COM接口的客户机程序使用,甚至脚本程序。
8、两步创建模块和它的组成部分 既然一个组件(DLL或EXE)能实现一个以上的功能,ATL向导在创建程序时,把整合的开发环境拆分为两部分。首先,你创建组件,然后把功能加入到你的组件中。
9、创建模块 创建模块的详细步骤:从“File”菜单选择“New...”,然后选择你要创建的工程并填写工程名字(当然,这个名字得你点击了“Mod”确定后才有效的),工程对话框如下图所示:(顺便提一下,也不知是也意还是无意的--新建工程时"ATL COM AppWizard"是默认的,不过也可能是因为按照字母顺序来的吧?)
当你点击“OK”后,你会看到包含你使用了的简短的向导。(如图“Step 1 of 1") 然后选择你的程序类型:DLL(为进程提供的),EXE(独立的),或者是服务类型EXE。现在选择的是为进程提供服务的DLL。 现在我们不讨论最后三个选择框。因为现在不需要使用MFC,MTS,或者Proxy/stub code。 单击“Finish”,我们可以看到工程包含了一个文件组。这里面包含有如下一些文件: ◆一个.idl类型声明库文件,一个工程有且只有一个这样的声明。 ◆一个.def文件,它包含有4个DLL组件所必需的接口。 ◆一个.rc资源文件,包含有关版本信息、一个工程名字的字符串。 ◆一个资源头文件,它包含有关资源ID的定义。 ◆stdafx.h和stdafx.cpp文件包含了系统调用缓存以快速建造的一些方法。 ◆最后,还有源代码文件.cpp文件,.cpp文件包含了完成程序功能所必需的所有功能代码。我们将详细说明这个文件。
[此贴子已经被作者于2004-12-27 15:06:59编辑过]