本书是经典的''''VisualC++技术内幕''''的最新版。VisualC++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着VisualC++的发展,MFC已经不是VisualC++中唯一的类库了,其他还有ATL、STL等。此外,VisualC++还融合了大量的开发工具,特别是与Internet相关的开发支持。最后,本书也介绍了VisualC++对.NET的支持。总体而言,本书涵盖了当前最新的VisualC++的主流技术,既有对老技术的继承和更新,也有对新技术的精辟阐述。所以,阅读本书可以全面拓宽读者的知识面。从这层意义上讲,本书相当于VisualC++的百科全书,它浓缩了VisualC++的精华。本书面向中级VisualC++程序设计人员,并可以作为高年级计算机专业学生及软件学院学生的程序设计教程。自2000年6月微软宣布自己的.NET战略以来,在不到两年的时间里,.NET已经从战略变成现实。.NET带来了全新的、快速而敏捷的企业计算能力,也给软件开发商和软件开发人员提供了支持未来计算的高效Web服务开发工具。作为微软.NET战略的重要组成部分:VisualStudio.NET(中文版)已经于2002年3月22日正式在中国推出。VisualStudio.NET是一个功能强大、高效并且可扩展的编程环境。它充分展现了应用程序开发的潜能,并提供了生成应用程序所需的工具和技术。这些应用程序将给当今的企业、机构提供强大的支持,并推动下一代基于XMLWeb服务软件的发展。有了VisualStudio.NET,那些对全世界数百万的专业和业余程序员来说曾一度极端复杂、费时费力,甚至让人望而生畏的编程任务现在已不再神秘。更重要的是,VisualStudio.NET使开发人员能运用既有的技能和知识来迎接新的编程挑战。在10年前,VisualBasic1.0成为数以百万计的开发人员的革命性的应用程序开发语言。现在,VisualStudio.NET为未来的10年做好了准备。微软出版社为了配合VisualStudio.NET的推广以及.NET技术的普及,邀请VisualStudio.NET项目开发组的核心开发人员和计算机图书专业作家精心编写了英文版《微软.NET程序员系列》丛书;该丛书自面市以来,在美国图书销量排行榜上一直高居前列,颇受好评,成为程序开发人员和网络开发人员了解.NET技术的权威工具书。尤其是《Microsoft.NETFramework程序设计》一书,长期占据美国及欧洲此类书籍的排行榜冠军位置,程序开发人员不可不读此书。清华大学出版社为了满足中国广大程序开发人员、网络开发人员学习最新技术的渴望,在微软出版社的配合下,从《微软.NET程序员系列》这套丛书中精选了40本50余本翻译成中文,以满足国内广大读者的需要。这套丛书阵容庞大且在不断扩充之中,几乎涵盖了.NET技术及其应用的各个方面;也正因为如此,翻译和编辑加工的工作量也大得惊人。但为了保持国外优秀技术图书的魅力,同时使读者领会新技术的真谛,本丛书的翻译和编辑都是经过严格筛选的、具有很高的翻译水平或丰富编辑经验的技术人员;另外,我们还聘请微软公司VisualStudio.NET产品组的技术专家审读每一本书,确保在技术上准确无误。相信这套丛书定会帮助程序开发人员、网络开发人员以及那些具有一定编程基础的中、高级读者,快速、全面地掌握.NET技术,协助他们为技术生涯的下一个10年做好准备,为培养新一代软件人才,并推动中国软件产业的快速发展起到积极的作用!译序终于可以松一口气了,翻译一本上千页的图书实在是一个不小的工程。想起五年之前我第一次翻译计算机图书(本书的第四版)的时候,期望借这本书将自己的编程知识总结和回顾一下。时隔五年之后再翻译第六版,算?墙サ谋喑叹橛肿邢傅馗聪傲艘槐椋诜牍讨校行矶嗟胤接只狡鹆说背趺鱒isualC++和MFC时的那种感觉,因为那时摸索得来的经验与本书中的许多内容不谋而合,所以,每每碰到这种地方,总是感觉特别亲切,作为C++程序员的那种掌控一切的豪情油然而生,也真切地希望每一个VisualC++程序员都能够掌握这些技术,并享受这种因知识和技术而带来的人生体验和乐趣。当然,除了怀旧之外,本书中新增的内容又让我手心发痒,恨不得回到程序员的角色之中,利用这些新的技术(特别是.NET和Internet部分)做一个实实在在的项目。一本讲解技术的书能够将译者和读者的情绪带动起来,并且让他(们)产生亲近技术的欲望,这恐怕正是本书的魅力所在吧。这几年来,关于VisualC++的书籍多如牛毛,但这本书一直占据着最重要的地位,我有幸翻译了本书的两个重要版本,所以借第六版中文版出版之际,谈谈我对本书的一些体会,算是译序吧。一、本书与VisualC++的发展历程了解本书历史的读者都知道,本书的开创者DavidKruglinski在完成了第四版之后因为事故身亡,以后的版本是别人续写的。其中,第六版是由GeorgeShepherd(MFCInternals的作者)续写的,以George对于MFC和VisualC++的理解深度,以及他的写作经验和教学经验,新版本只会增色而不会逊色。相信读者在读过这本书之后能够体会到这一点。在我手上,除了英文第六版之外,还有本书的第二版(中文版)、第四版(中文版和英文版)。书很沉,很有分量,拿在手里沉甸甸的,当然更重的是内容。关于本书具体的内容请读者参看本书的目录或者引言部分。这里我想说明我对本书技术倾向的看法。VisualC++开发环境包含哪些内容呢?这是被很多人误解的一个问题。有人把MFC和VisualC++等同起来,也有人把VisualC++和C++混淆起来,实际上,它们都有明确的分界线,在软件开发过程中,它们有各自的含义和用途。VisualC++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着VisualC++的发展,MFC已经不是VisualC++中唯一的类库了,其他还有ATL、STL等。此外,VisualC++还融合了大量的开发工具,特别是与Internet相关的开发支持。本书几乎涵盖了所有这些内容,所以,阅读本书可以拓宽知识面。从这层意义上讲,本书相当于VisualC++的百科全书,它浓缩了VisualC++的精华。MicrosoftVisualC++的版本更新基本上反映了这10年来Windows平台上软件技术的发展历程。在VisualC++5.0版本之前,一切变化都在伴随着MFC的成熟与壮大,在此期间VisualC++主要用于开发桌面应用程序。到5.0版本之后,MFC已经不再是发展的重点,整体的发展呈多元化趋势,先是COM技术的普及,然后是Internet和Web开发技术的不断深入,最新版本中又引入了.NET框架的支持。本书的发展历程也反映了VisualC++的技术路线。在本书第四版(对应于VisualC++5.0)出版的时候,桌面应用技术已经非常成熟,MFC结构完全定型,同时COM技术在Internet应用中大行其道,由此产生了一批Active技术,包括ActiveX控件、ASP、ADO、ActiveDocument等。在第四版中我们可以看到关于这些技术的讲解。(第五版又引入了ATL相关的一些内容。)现在呢,最大的变化,也是最激动人心的变化应该是.NET架构的引入,当然也随之带来了一大批新的技术。从长远的发展来看,.NET必将取代现有的大量应用技术,但不是所有,另一方面,新的技术和老的技术将会共存相当长的时间。本书第六版基本上反映了现在的技术发展状况,MFC仍然存在,但是一些新兴的用户界面元素也被更新到MFC中。并且,本书也全面地讨论了COM和相关的开发支持,包括MFC和ATL对于COM的支持,这是目前仍然非常实用的两项技术。本书还讨论了针对Internet的程序设计技术,包括MFC对于Winsock和WinInet的支持,以及DHTML和ATLServer等。最后,本书也介绍了VisualC++对于.NET的支持,其中包括托管的C++以及如何用托管的C++来开发WindowsForms、ASP.NET和ADO.NET应用程序。本书所有这些内容涵盖了当前的主流技术,既有对老技术的继承和更新,又有对新技术的精辟阐述,所以,通过这本书你可以全面地学习到这些实用开发技术。二、本书特色和新增内容虽然这是一本再版的书,并且有差不多三分之二的内容与以前的版本(这里主要指第四版)相同,但是,它仍然有自己的特色以及新增的丰富内容。本书的叙述风格基本上没有变化,仍然按照以前的模式,既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。并且,本书在讲解的时候也不啰嗦,与以前的版本相比,本书的内容增加了不少,但是篇幅基本上没有明显的增加。作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。本书新增的内容可以分几个方面来看:1.本书的前三部分内容主要针对桌面应用程序的开发,这既是MFC的传统优势,也是本书的传统优势。我们应该可以感受得到,这几年桌面应用技术还是有了一些变化的,特别是随着Windows2000/XP的推?觯痪」躆FC的基本框架保持不变,但是在许多细微之处还是有了许多新增的界面元素,例如,除了SDI和MDI之外,Windows2000又引入了一种新的界面风格:多顶级窗口界面(MTI)。而且InternetExplorer的新版本更是引入了许多新的UI元素,包括一些扩展的控件,以及Rebar等。VisualC++.NET为这些新的特性提供了支持,本书也介绍了相应的编程技术。2.本书第四部分介绍了COM、自动化、ActiveX和OLE。COM是一项底层的组件技术,这部分介绍了COM的原理,以及MFC和ATL提供的最基本的支持。要想在不到300页的篇幅中全面地介绍所有这些技术是不可能的,但是本书这一部分中,不仅成功地叙述了这些基本知识,同时还介绍了几项关键应用技术,包括自动化、统一数据传输、用ATL来开发ActiveX控件,以及用OLEDB模板来开发OLEDB使用者和OLEDB提供者。值得一提的是,除了传统的C++编程之外,VisualC++.NET还引入了一种新的编程模式,被称为属性化的编程,用于支持COM组件的开发,它的基本思想是,允许C++类直接引用COM类和COM接口的一些属性,由编译器来解释这些属性并产生必要的代码,从而减轻了程序员在开发COM组件过程中一些不必要的负担。3.Internet开发是一个不可错过的部分。本书第五部分在介绍MFC对Winsock和WinInet支持的基础上,又介绍了动态HTML和ATLServer。请读者不要将ATLServer与COM联系起来,实际上,ATLServer主要是针对IIS的一个开发工具,它被用来支持对于IIS服务器的扩展。4.最后一部分介绍Microsoft.NET程序设计。这是本书完全新增的内容,虽然.NET的标准语言应该是C#,但是VisualC++.NET也提供了全面的支持,它是通过扩展标准C++而实现的,被称为托管的C++。被托管的代码将运行在.NET的公共语言运行时库之上,这是对组件技术的新发展,它使得应用程序运行在一个更加完善的管理环境之中,底层大量的设施可以被直接使用,并且软件的发布和协作将更加理想。对于开发人员呢,负担减轻了,他们可以更加关注于自己的应用,而无需为一些琐碎的细节操心。这一部分首先介绍了.NET中最为核心的公共语言运行时库,然后介绍了托管C++扩展,以及它的编程示例。最后用三章篇幅分别介绍了如何用托管C++来开发WindowsForms、ASP.NET和ADO.NET应用程序。三、如何使用本书面对一本涉及面如此广阔的计算机程序设计图书,我们该如何来使用呢?要想掌握书中每一项技术,不仅需要大量的时间,还需要扎实的基本功,但是,掌握这些技术对于把握现代软件设计环境又非常有帮助。按照这本书的内容结构,读者当然可以有所取舍,但是最好的做法是,首先按顺序阅读一遍,如果有可能的话,对于其中一些关键例子最好配合在机器上进行实战练习。然后,对于感兴趣的话题可以仔细钻研,或者把这本书当作参考书,以后随时翻阅。这本书讲解的深度属于中等程度,读者最好有一些C++和Windows应用开发方面的基础。对于书中讲述的每一项技术,本书也只是起到基本的引导作用,如果读者希望进一步深入钻研的话,需要阅读系统提供的源代码或者查阅MSDNLibrary中的详细讲解。但是,通过这本书,你可以快速地领会每一项技术。因为这本书既有原理性的讲解,也有示例说明,甚至还有一步一步的实战过程。所以,本书也适合于被用作教材,可以针对研究生程序设计课程或者高年级本科生课程。我在本书刚刚出版之际,用本书作为北京大学软件学院研究生课程''''程序开发环境分析与实践''''的教材,取得了不错的效果。曾经听人提到过,说这本书只是教会你怎么用向导工具来生成一个应用程序,离开了向导工具你还是什么也不会。这种观点并不正确,我说过这本书是原理和实战的结合,向导是提高开发效率的好帮手,但是如果你明白了原理,难道还会离不开向导吗?难道会看不懂代码吗?我很赞成使用VisualC++提供的向导,但是一定要知道这些向导帮你做了哪些事情,这很重要,否则当向导不工作的时候,你就失控了。最后,我想说明一点,在翻译本书时,本书中的屏幕拷贝图以及VisualC++.NET集成环境中的一些称谓(比如各种向导的叫法)我都保留了英文版本,而没有将它们转译过来。国内的大多数程序员都会使用中文版的VisualStudio.NET,VisualStudio.NET中文版几乎彻底地进行了汉化,所以,读者在阅读本书的时候也许会感到些微的不便。但是,本书在适当的地方作了?喙氐乃得鳎嘈耪庑┲杏⑽牟钜觳换嵊跋炷愕脑亩梁屠斫狻?在本书的翻译过程中,我参照了第四版(中文版)的内容,发现了第四版中有不少错误,所幸的是,我这次还有机会把这些错误一一改正过来。同时也顺带着把原书中的一些错误也改正了。当然,翻译过程中必定会带来一些语言表达上的偏差,期望这些偏差不会影响您的阅读。潘爱民2003年2月14日于北大燕园