Visual C++ .NET技术内幕(第6版)
基本信息
编辑推荐
本书涵盖了以下的主题:
基础知识:Windows和Visual C++;MFC本质和MFC应用程序向导;Visual C++.NET向导;Windows消息映射;经典的GDI函数、字体和位图;对话框;通用控件和Microsoft ActiveX控件,Microsoft Win 32核心内存管理;Windows肖息处理和多线程编程。
MFC文档-视图架构:菜单、键盘加速键、复文本编辑控件、属性表、工具栏和状态栏;可重用框架窗口基类;文档与视图分离;读写文档-SDI和MDI应用程序;打印和打印预览;切分窗口和多视图;上下文相关帮助;动态链接库;不带文档或视图类的MFC程度。
COM、自动化ActiveX与OLE:自动化和Dispatch、用剪贴板和OLE拖放进行数据传输、ATL(活动模板库)、ActiveX控件、OLEDB模板。
Internet程序设计:TCP/IP、Winsock、WiniNet;动态HTML:ATL Server。
.NET和远景:.NET平台;.NET与托管C++的互操作;使用托管C++进行Windows Forms、GDI+和.NET Web服务的开发;Microsoft ADO .NET。
内容简介回到顶部↑
[font color="#ff6600"]本书特色:[/font]
·既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。
·在讲解的时候语言简洁不啰嗦
·作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
[font color="#ff6600"]本书新增内容(主要是与第四版相比较)[/font]
·本书的前三部分内容主要针对桌面应用程序的开发,这既是mfc的传统优势,也是本书的传统优势。
·本书第四部分介绍了com、自动化、activex和ole。
·除了传统的c++编程之外,visual c++ .net还引入了一种新的编程模式
·internet开发是一个不可错过的部分。
·最后一部分介绍microsoft .net程序设计。这是本书完全新增的内容。
本书是经典的“visual c++技术内幕”的最新版。visual c++一方面是一个c++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些c++类库,其中最具影响力的当然是mfc。随着visual c++的发展,mfc已经不是visual c++中唯一的类库了,其他还有atl、stl等。此外,visual c++还融合了大量的开发工具,特别是与internet相关的开发支持。最后,本书也介绍了visual c++对.net的支持。总体而言,本书涵盖了当前最新的visual c++的主流技术,既有对老技术的继承和更新,也有对新技术的精辟阐述。所以,阅读本书可以全面拓宽读者的知识面。从这层意义上讲,本书相当于visual c++的百科全书,它浓缩了visual c++的精华。本书面向中级visual c++程序设计人员,并可以作为高年级计算机专业学生及软件学院学生的程序设计教程。
·既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。
·在讲解的时候语言简洁不啰嗦
·作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
[font color="#ff6600"]本书新增内容(主要是与第四版相比较)[/font]
·本书的前三部分内容主要针对桌面应用程序的开发,这既是mfc的传统优势,也是本书的传统优势。
·本书第四部分介绍了com、自动化、activex和ole。
·除了传统的c++编程之外,visual c++ .net还引入了一种新的编程模式
·internet开发是一个不可错过的部分。
·最后一部分介绍microsoft .net程序设计。这是本书完全新增的内容。
本书是经典的“visual c++技术内幕”的最新版。visual c++一方面是一个c++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些c++类库,其中最具影响力的当然是mfc。随着visual c++的发展,mfc已经不是visual c++中唯一的类库了,其他还有atl、stl等。此外,visual c++还融合了大量的开发工具,特别是与internet相关的开发支持。最后,本书也介绍了visual c++对.net的支持。总体而言,本书涵盖了当前最新的visual c++的主流技术,既有对老技术的继承和更新,也有对新技术的精辟阐述。所以,阅读本书可以全面拓宽读者的知识面。从这层意义上讲,本书相当于visual c++的百科全书,它浓缩了visual c++的精华。本书面向中级visual c++程序设计人员,并可以作为高年级计算机专业学生及软件学院学生的程序设计教程。
作译者回到顶部↑
目录回到顶部↑
第ⅰ部分 windows、visual c++ .net和应用程序框架基础
第1章 windows和visual c++ .net 3
1.1 windows编程模型 3
1.1.1 消息处理 3
1.1.2 windows的图形设备接口(gdi) 4
1.1.3 基于资源的程序设计 5
1.1.4 内存管理 5
1.1.5 动态连接库(dll) 5
1.1.6 win32应用程序编程接口 5
1.2 visual c++ .net的组成 6
1.2.1 visual c++ .net和创建过程 6
1.2.2 资源视图窗口和资源编辑器 9
1.2.3 c/c++编译器 9
1.2.4 源代码编辑器 9
1.2.5 资源编译器 10
1.2.6 连接器 10
1.2.7 调试器 10
1.2.8 mfc application wizard 11
1.2.9 class view 12
1.2.10 方案管理器 12
第1章 windows和visual c++ .net 3
1.1 windows编程模型 3
1.1.1 消息处理 3
1.1.2 windows的图形设备接口(gdi) 4
1.1.3 基于资源的程序设计 5
1.1.4 内存管理 5
1.1.5 动态连接库(dll) 5
1.1.6 win32应用程序编程接口 5
1.2 visual c++ .net的组成 6
1.2.1 visual c++ .net和创建过程 6
1.2.2 资源视图窗口和资源编辑器 9
1.2.3 c/c++编译器 9
1.2.4 源代码编辑器 9
1.2.5 资源编译器 10
1.2.6 连接器 10
1.2.7 调试器 10
1.2.8 mfc application wizard 11
1.2.9 class view 12
1.2.10 方案管理器 12
译者序回到顶部↑
终于可以松一口气了,翻译一本上千页的图书实在是一个不小的工程。想起五年之前我第一次翻译计算机图书(本书的第四版)的时候,期望借这本书将自己的编程知识总结和回顾一下。时隔五年之后再翻译第六版,算是将过去的编程经验又仔细地复习了一遍,在翻译过程中,有许多地方又唤起了当初摸索Visual C++和MFC时的那种感觉,因为那时摸索得来的经验与本书中的许多内容不谋而合,所以,每每碰到这种地方,总是感觉特别亲切,作为C++程序员的那种掌控一切的豪情油然而生,也真切地希望每一个Visual C++程序员都能够掌握这些技术,并享受这种因知识和技术而带来的人生体验和乐趣。当然,除了怀旧之外,本书中新增的内容又让我手心发痒,恨不得回到程序员的角色之中,利用这些新的技术(特别是.NET和Internet部分)做一个实实在在的项目。一本讲解技术的书能够将译者和读者的情绪带动起来,并且让他(们)产生亲近技术的欲望,这恐怕正是本书的魅力所在吧。
这几年来,关于Visual C++的书籍多如牛毛,但这本书一直占据着最重要的地位,我有幸翻译了本书的两个重要版本,所以借第六版中文版出版之际,谈谈我对本书的一些体会,算是译序吧。
一、本书与Visual C++的发展历程
了解本书历史的读者都知道,本书的开创者David Kruglinski在完成了第四版之后因为事故身亡,以后的版本是别人续写的。其中,第六版是由George Shepherd(MFC Internals的作者)续写的,以George对于MFC和Visual C++的理解深度,以及他的写作经验和教学经验,新版本只会增色而不会逊色。相信读者在读过这本书之后能够体会到这一点。
在我手上,除了英文第六版之外,还有本书的第二版(中文版)、第四版(中文版和英文版)。书很沉,很有分量,拿在手里沉甸甸的,当然更重的是内容。关于本书具体的内容请读者参看本书的目录或者引言部分。这里我想说明我对本书技术倾向的看法。
Visual C++开发环境包含哪些内容呢?这是被很多人误解的一个问题。有人把MFC和Visual C++等同起来,也有人把Visual C++和C++混淆起来,实际上,它们都有明确的分界线,在软件开发过程中,它们有各自的含义和用途。
Visual C++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着Visual C++的发展,MFC已经不是Visual C++中唯一的类库了,其他还有ATL、STL等。此外,Visual C++还融合了大量的开发工具,特别是与Internet相关的开发支持。本书几乎涵盖了所有这些内容,所以,阅读本书可以拓宽知识面。从这层意义上讲,本书相当于Visual C++的百科全书,它浓缩了Visual C++的精华。
Microsoft Visual C++的版本更新基本上反映了这10年来Windows平台上软件技术的发展历程。在Visual C++ 5.0版本之前,一切变化都在伴随着MFC的成熟与壮大,在此期间Visual C++主要用于开发桌面应用程序。到5.0版本之后,MFC已经不再是发展的重点,整体的发展呈多元化趋势,先是COM技术的普及,然后是Internet和Web开发技术的不断深入,最新版本中又引入了.NET框架的支持。
本书的发展历程也反映了Visual C++的技术路线。在本书第四版(对应于Visual C++ 5.0)出版的时候,桌面应用技术已经非常成熟,MFC结构完全定型,同时COM技术在Internet应用中大行其道,由此产生了一批Active技术,包括ActiveX控件、ASP、ADO、Active Document等。在第四版中我们可以看到关于这些技术的讲解。(第五版又引入了ATL相关的一些内容。)
现在呢,最大的变化,也是最激动人心的变化应该是.NET架构的引入,当然也随之带来了一大批新的技术。从长远的发展来看,.NET必将取代现有的大量应用技术,但不是所有,另一方面,新的技术和老的技术将会共存相当长的时间。
本书第六版基本上反映了现在的技术发展状况,MFC仍然存在,但是一些新兴的用户界面元素也被更新到MFC中。并且,本书也全面地讨论了COM和相关的开发支持,包括MFC和ATL对于COM的支持,这是目前仍然非常实用的两项技术。本书还讨论了针对Internet的程序设计技术,包括MFC对于Winsock和WinInet的支持,以及DHTML和ATL Server等。最后,本书也介绍了Visual C++对于.NET的支持,其中包括托管的C++以及如何用托管的C++来开发Windows Forms、ASP.NET和ADO.NET应用程序。本书所有这些内容涵盖了当前的主流技术,既有对老技术的继承和更新,又有对新技术的精辟阐述,所以,通过这本书你可以全面地学习到这些实用开发技术。
二、本书特色和新增内容
虽然这是一本再版的书,并且有差不多三分之二的内容与以前的版本(这里主要指第四版)相同,但是,它仍然有自己的特色以及新增的丰富内容。
本书的叙述风格基本上没有变化,仍然按照以前的模式,既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。并且,本书在讲解的时候也不啰嗦,与以前的版本相比,本书的内容增加了不少,但是篇幅基本上没有明显的增加。作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
本书新增的内容可以分几个方面来看:
1. 本书的前三部分内容主要针对桌面应用程序的开发,这既是MFC的传统优势,也是本书的传统优势。我们应该可以感受得到,这几年桌面应用技术还是有了一些变化的,特别是随着Windows 2000/XP的推出;尽管MFC的基本框架保持不变,但是在许多细微之处还是有了许多新增的界面元素,例如,除了SDI和MDI之外,Windows 2000又引入了一种新的界面风格:多顶级窗口界面(MTI)。而且Internet Explorer的新版本更是引入了许多新的UI元素,包括一些扩展的控件,以及Rebar等。Visual C++ .NET为这些新的特性提供了支持,本书也介绍了相应的编程技术。
2. 本书第四部分介绍了COM、自动化、ActiveX和OLE。COM是一项底层的组件技术,这部分介绍了COM的原理,以及MFC和ATL提供的最基本的支持。要想在不到300页的篇幅中全面地介绍所有这些技术是不可能的,但是本书这一部分中,不仅成功地叙述了这些基本知识,同时还介绍了几项关键应用技术,包括自动化、统一数据传输、用ATL来开发ActiveX控件,以及用OLE DB模板来开发OLE DB使用者和OLE DB提供者。
值得一提的是,除了传统的C++编程之外,Visual C++ .NET还引入了一种新的编程模式,被称为属性化的编程,用于支持COM组件的开发,它的基本思想是,允许C++类直接引用COM类和COM接口的一些属性,由编译器来解释这些属性并产生必要的代码,从而减轻了程序员在开发COM组件过程中一些不必要的负担。
3. Internet开发是一个不可错过的部分。本书第五部分在介绍MFC对Winsock和WinInet支持的基础上,又介绍了动态HTML和ATL Server。请读者不要将ATL Server与COM联系起来,实际上,ATL Server主要是针对IIS的一个开发工具,它被用来支持对于IIS服务器的扩展。
4. 最后一部分介绍Microsoft .NET程序设计。这是本书完全新增的内容,虽然.NET的标准语言应该是C#,但是Visual C++ .NET也提供了全面的支持,它是通过扩展标准C++而实现的,被称为托管的C++。被托管的代码将运行在.NET的公共语言运行时库之上,这是对组件技术的新发展,它使得应用程序运行在一个更加完善的管理环境之中,底层大量的设施可以被直接使用,并且软件的发布和协作将更加理想。对于开发人员呢,负担减轻了,他们可以更加关注于自己的应用,而无需为一些琐碎的细节操心。这一部分首先介绍了.NET中最为核心的公共语言运行时库,然后介绍了托管C++扩展,以及它的编程示例。最后用三章篇幅分别介绍了如何用托管C++来开发Windows Forms、ASP.NET和ADO.NET应用程序。
这几年来,关于Visual C++的书籍多如牛毛,但这本书一直占据着最重要的地位,我有幸翻译了本书的两个重要版本,所以借第六版中文版出版之际,谈谈我对本书的一些体会,算是译序吧。
一、本书与Visual C++的发展历程
了解本书历史的读者都知道,本书的开创者David Kruglinski在完成了第四版之后因为事故身亡,以后的版本是别人续写的。其中,第六版是由George Shepherd(MFC Internals的作者)续写的,以George对于MFC和Visual C++的理解深度,以及他的写作经验和教学经验,新版本只会增色而不会逊色。相信读者在读过这本书之后能够体会到这一点。
在我手上,除了英文第六版之外,还有本书的第二版(中文版)、第四版(中文版和英文版)。书很沉,很有分量,拿在手里沉甸甸的,当然更重的是内容。关于本书具体的内容请读者参看本书的目录或者引言部分。这里我想说明我对本书技术倾向的看法。
Visual C++开发环境包含哪些内容呢?这是被很多人误解的一个问题。有人把MFC和Visual C++等同起来,也有人把Visual C++和C++混淆起来,实际上,它们都有明确的分界线,在软件开发过程中,它们有各自的含义和用途。
Visual C++一方面是一个C++实现,它提供了一个功能强大的集成开发环境;另一方面,它提供了一些C++类库,其中最具影响力的当然是MFC。随着Visual C++的发展,MFC已经不是Visual C++中唯一的类库了,其他还有ATL、STL等。此外,Visual C++还融合了大量的开发工具,特别是与Internet相关的开发支持。本书几乎涵盖了所有这些内容,所以,阅读本书可以拓宽知识面。从这层意义上讲,本书相当于Visual C++的百科全书,它浓缩了Visual C++的精华。
Microsoft Visual C++的版本更新基本上反映了这10年来Windows平台上软件技术的发展历程。在Visual C++ 5.0版本之前,一切变化都在伴随着MFC的成熟与壮大,在此期间Visual C++主要用于开发桌面应用程序。到5.0版本之后,MFC已经不再是发展的重点,整体的发展呈多元化趋势,先是COM技术的普及,然后是Internet和Web开发技术的不断深入,最新版本中又引入了.NET框架的支持。
本书的发展历程也反映了Visual C++的技术路线。在本书第四版(对应于Visual C++ 5.0)出版的时候,桌面应用技术已经非常成熟,MFC结构完全定型,同时COM技术在Internet应用中大行其道,由此产生了一批Active技术,包括ActiveX控件、ASP、ADO、Active Document等。在第四版中我们可以看到关于这些技术的讲解。(第五版又引入了ATL相关的一些内容。)
现在呢,最大的变化,也是最激动人心的变化应该是.NET架构的引入,当然也随之带来了一大批新的技术。从长远的发展来看,.NET必将取代现有的大量应用技术,但不是所有,另一方面,新的技术和老的技术将会共存相当长的时间。
本书第六版基本上反映了现在的技术发展状况,MFC仍然存在,但是一些新兴的用户界面元素也被更新到MFC中。并且,本书也全面地讨论了COM和相关的开发支持,包括MFC和ATL对于COM的支持,这是目前仍然非常实用的两项技术。本书还讨论了针对Internet的程序设计技术,包括MFC对于Winsock和WinInet的支持,以及DHTML和ATL Server等。最后,本书也介绍了Visual C++对于.NET的支持,其中包括托管的C++以及如何用托管的C++来开发Windows Forms、ASP.NET和ADO.NET应用程序。本书所有这些内容涵盖了当前的主流技术,既有对老技术的继承和更新,又有对新技术的精辟阐述,所以,通过这本书你可以全面地学习到这些实用开发技术。
二、本书特色和新增内容
虽然这是一本再版的书,并且有差不多三分之二的内容与以前的版本(这里主要指第四版)相同,但是,它仍然有自己的特色以及新增的丰富内容。
本书的叙述风格基本上没有变化,仍然按照以前的模式,既有原理性的说明,也有指导性的介绍,还有很好的例子来帮助理解一些技术细节。并且,本书在讲解的时候也不啰嗦,与以前的版本相比,本书的内容增加了不少,但是篇幅基本上没有明显的增加。作者对于前面部分的传统内容有所精简,以便为后面的内容腾出空间。
本书新增的内容可以分几个方面来看:
1. 本书的前三部分内容主要针对桌面应用程序的开发,这既是MFC的传统优势,也是本书的传统优势。我们应该可以感受得到,这几年桌面应用技术还是有了一些变化的,特别是随着Windows 2000/XP的推出;尽管MFC的基本框架保持不变,但是在许多细微之处还是有了许多新增的界面元素,例如,除了SDI和MDI之外,Windows 2000又引入了一种新的界面风格:多顶级窗口界面(MTI)。而且Internet Explorer的新版本更是引入了许多新的UI元素,包括一些扩展的控件,以及Rebar等。Visual C++ .NET为这些新的特性提供了支持,本书也介绍了相应的编程技术。
2. 本书第四部分介绍了COM、自动化、ActiveX和OLE。COM是一项底层的组件技术,这部分介绍了COM的原理,以及MFC和ATL提供的最基本的支持。要想在不到300页的篇幅中全面地介绍所有这些技术是不可能的,但是本书这一部分中,不仅成功地叙述了这些基本知识,同时还介绍了几项关键应用技术,包括自动化、统一数据传输、用ATL来开发ActiveX控件,以及用OLE DB模板来开发OLE DB使用者和OLE DB提供者。
值得一提的是,除了传统的C++编程之外,Visual C++ .NET还引入了一种新的编程模式,被称为属性化的编程,用于支持COM组件的开发,它的基本思想是,允许C++类直接引用COM类和COM接口的一些属性,由编译器来解释这些属性并产生必要的代码,从而减轻了程序员在开发COM组件过程中一些不必要的负担。
3. Internet开发是一个不可错过的部分。本书第五部分在介绍MFC对Winsock和WinInet支持的基础上,又介绍了动态HTML和ATL Server。请读者不要将ATL Server与COM联系起来,实际上,ATL Server主要是针对IIS的一个开发工具,它被用来支持对于IIS服务器的扩展。
4. 最后一部分介绍Microsoft .NET程序设计。这是本书完全新增的内容,虽然.NET的标准语言应该是C#,但是Visual C++ .NET也提供了全面的支持,它是通过扩展标准C++而实现的,被称为托管的C++。被托管的代码将运行在.NET的公共语言运行时库之上,这是对组件技术的新发展,它使得应用程序运行在一个更加完善的管理环境之中,底层大量的设施可以被直接使用,并且软件的发布和协作将更加理想。对于开发人员呢,负担减轻了,他们可以更加关注于自己的应用,而无需为一些琐碎的细节操心。这一部分首先介绍了.NET中最为核心的公共语言运行时库,然后介绍了托管C++扩展,以及它的编程示例。最后用三章篇幅分别介绍了如何用托管C++来开发Windows Forms、ASP.NET和ADO.NET应用程序。
前言回到顶部↑
Microsoft Visual Studio .NET(特别是Visual C++ .NET)加强了Microsoft对于Internet技术的关注,而Internet技术正是Microsoft .NET体系结构的核心所在。除提供了对于.NET的率先支持以外,Visual C++ .NET保留了以前您所熟悉的所有高生产力特性,比如"编辑并继续"(Edit and Continue)、IntelliSense、AutoComplete以及代码提示等特性。Visual C++ .NET还包括了许多新的特性,比如针对.NET程序设计的托管代码扩展、对于属性化代码的支持,以及一个更为统一的开发环境。这些特性把Visual C++ .NET提升到了一个新的层次上。本书将帮助您快速掌握Visual C++中引入的最新技术。
.NET、MFC和ATL
如今我们面临的技术更新总是日新月异。我们的办公室桌面从没有计算机,到20世纪80年代几乎每个人都有一台运行MS-DOS的计算机,再到90年代中期几乎每台机器都在运行Microsoft Windows系统。技术的车轮又一次向前滚动了。在90年代后期,人人都在手工开发Web网站,使用的工具有原始的HTML(Hypertext Markup Language,超文本标记语言)、CGI(Common Gateway Interface,公共网关接口)、ISAPI(Internet Server Application Programming Interface) DLL、Java和ASP(Active Server Page,活动服务器页面)。2000年7月,Microsoft向全球宣布,它将把公司发展的赌注压在一个新的、名为.NET的技术方向上,从而改变Web网站的开发方式。
Microsoft当前推动的是真正的.NET。几年前,我们就可以在某个地方安放一台服务器,并申请一个IP地址,然后在服务器上放上一些内容,这样就算建成了一个Web网站。任何人只要用该网站的URL就可以在上面冲浪,并访问其上的内容。商务性质的企业已经充分使用了这类Web的优势,他们把有用的信息通过Web网站告知顾客。Web也已经成为一个无价的研究工具和一个有效的新闻广播媒介。
未来的计算世界将紧密地与Web联系起来。然而,Web网站不再局限于想方设法吸引人们的眼球,而是要吸引计算机本身。也就是说,通过Web服务,Web站点将是可编程的。.NET同时也将推动"由服务器来提供丰富的用户界面"的趋势。
随着重心转移到"Web服务"和"基于服务器的用户界面"上来,看起来似乎独立的应用系统和基于客户的用户界面程序将会逐渐消亡,而这正是MFC(Microsoft Foundation Class)库的主要应用领域。但是,人们对于"丰富的客户端用户界面"的需求不可能一下子消失。许多人认为,PC机和分布式技术的出现将是"大型机和小型机上集中式处理时代"的终结。它表明PC和分布式技术只是增加了可用的计算资源。Web服务的.NET架构,以及服务器提供的丰富的用户界面只是为软件开发人员增加了可用的选择而已。丰富的客户端用户界面对于许多类型的应用而言仍将非常重要,在一个系统中,既需要这些使用客户端用户界面的应用,同样也需要使用其他类型的用户界面(比如服务器产生的用户界面)的应用。
MFC是一个非常成熟又比较容易理解的技术,它拥有大量的第三方扩展。至少在相当长一段时间内,MFC仍将是编写功能全面的独立应用程序的最有效途径。本书的一大部分内容将集中在MFC风格的开发上,但是我们也将涉及Windows Forms的开发,这是编写客户端用户界面的.NET途径。
当然,接下去的问题是:COM的地位何在?COM已经解决了许多与分布式处理有关的问题,但是它有一些严重的缺陷--其中最根本的缺点都与组件的版本和类型信息有关。Microsoft的.NET架构是以公共语言运行库为基础的。该运行库作为.NET中的互操作性标准,取代了COM的地位。我们将在本书的第六部分介绍.NET和公共语言运行库。
COM和公共语言运行库分别代表了实现组件结构的不同途径,但是Microsoft已经将它们有机地融合起来,使之能够共存。在绝大多数的情况下,COM和运行库之间的互操作性是非常平滑的。在.NET的世界中,您可能不会发现自己正在使用COM作为组件结构。然而,您可能会发现自己正在使用ATL(Active Template Library,活动模板库)服务程序,这是一种高性能的编写Web站点的方法。
在本书的这一版中,我已经更新了有关ATL和MFC的内容,因为您将会发现,它们仍然非常有用。更重要的是,我将向您演示,在迁移到.NET世界中的时候,如何平衡您的传统代码(这听起来比"遗留代码"要好听,是不是?)。
托管的C++和C#
.NET平台新引入了一种类似C++的语言,称为C#。C#是一种curly-brace-oriented的语言,但没有C++的所有头痛之处。C#之所以如此有吸引力,很大程度上在于它去掉了C++中一些有问题的语言元素(比如原始的指针管理),同时又保留了C++有用的特性(比如虚函数)。C#编译器最终会产生托管的代码--运行在公共语言运行库之上的一种代码。
不过,整个世界不会在一夜之间完全转换到C#上来。仍然会有大量的C++代码还不能转换。而且对于开发人员而言,他们也需要花一定的时间才能完全适应C#。同时,.NET也引入了对于C++的扩展,允许产生托管的代码(即运行在公共语言运行库之上的代码)。C++的托管扩展将有助于减轻开发.NET平台上的软件的负担,因为这些扩展使得您可以快速地更新现有的代码,以便在.NET环境下工作。为了利用C++来开发托管的代码,这意味着您需要在自己的代码中加上各种关键字。最后,当编译器的编译工作完成之后,C#和托管的C++可以被混合到同样的可执行代码中。在.NET世界中,您可能会发现,您将用C#编写新的组件,同时利用托管的C++在原有C++代码的基础上增加.NET特性。
.NET和Java平台
最近几年,我们看到Java程序设计语言和平台已经引起了业界广泛的关注。Java提供了一种有用的方法用来分发客户端的用户界面(通过Java applet(小程序)),并且通过Java Enterprise Edition来提供企业解决方案,所以Java为Internet开发人员提供了极大的便利。现在,.NET已经成为目前最好的Internet开发平台。Java平台要求您使用Java语言编写所有的代码,.NET则与此不同,它允许您使用多种语言达到同样的机器指令集。您可以使用C++(这是本书的焦点所在)和它的托管扩展、Visual Basic .NET、C#,甚至大量第三方的.NET语言来编写您的程序。一旦您编写了源代码,它就被编译成中间语言,并最终在运行之前变成机器代码。因为.NET代码是由一个运行库托管的,所以您可以由此获得许多好处,比如垃圾回收和更好的代码安全性。
本书的适用对象
Visual C++ .NET具有复杂的应用程序框架(application framework)以及对于.NET的支持,它是为专业程序员准备的,本书也是如此。我假定您已经精通了C语言--不用参考手册就可以编写一条if语句。我还假定您已经接触过C++语言--至少学过这门课程或者读过C++的书籍,但可能还没写过太多的代码。您可以将C++语言的学习和法语的学习做比较。您可以在学校里学习法语,但您不可能说得很流利,除非您去一个说法语的国家,并开始与那里的人进行交谈。
Visual C++中的向导(wizard)可以为您节约时间,并且保证准确性,但是程序员必须要理解这些向导生成的代码,并且最终他们必须理解MFC和ATL库的结构、Windows操作系统的内部工作机理以及.NET的工作方式。然而,我并不假定您已经了解Windows和.NET程序设计。我知道,精通C的程序员能够以MFC的方式和.NET的方式学习Windows。此外,虽然了解C++比了解Win32 API更重要,但您还是应该知道如何运行Windows的以及基于Windows的应用程序。
即使您已经对Win32 API或者MFC库有经验了,这本书仍然可供您学习。首先,您可以学到一些新的特性,比如多顶级窗口界面(MTI,Multiple Top-Level Interface)和Visual C++ .NET向导。如果您尚未领会组件对象模型 (Component Object Model,简称COM),则本书介绍的一些重要理论会让您理解ActiveX控件。您也可以学习ATL服务程序和OLE DB模板,而且还可以学到针对Internet的C++程序设计(包括动态HTML)。最后,本书也包括了您在别处难以找到的新的有关托管C++扩展的内容。
本书没有包括的内容
.NET、MFC和ATL
如今我们面临的技术更新总是日新月异。我们的办公室桌面从没有计算机,到20世纪80年代几乎每个人都有一台运行MS-DOS的计算机,再到90年代中期几乎每台机器都在运行Microsoft Windows系统。技术的车轮又一次向前滚动了。在90年代后期,人人都在手工开发Web网站,使用的工具有原始的HTML(Hypertext Markup Language,超文本标记语言)、CGI(Common Gateway Interface,公共网关接口)、ISAPI(Internet Server Application Programming Interface) DLL、Java和ASP(Active Server Page,活动服务器页面)。2000年7月,Microsoft向全球宣布,它将把公司发展的赌注压在一个新的、名为.NET的技术方向上,从而改变Web网站的开发方式。
Microsoft当前推动的是真正的.NET。几年前,我们就可以在某个地方安放一台服务器,并申请一个IP地址,然后在服务器上放上一些内容,这样就算建成了一个Web网站。任何人只要用该网站的URL就可以在上面冲浪,并访问其上的内容。商务性质的企业已经充分使用了这类Web的优势,他们把有用的信息通过Web网站告知顾客。Web也已经成为一个无价的研究工具和一个有效的新闻广播媒介。
未来的计算世界将紧密地与Web联系起来。然而,Web网站不再局限于想方设法吸引人们的眼球,而是要吸引计算机本身。也就是说,通过Web服务,Web站点将是可编程的。.NET同时也将推动"由服务器来提供丰富的用户界面"的趋势。
随着重心转移到"Web服务"和"基于服务器的用户界面"上来,看起来似乎独立的应用系统和基于客户的用户界面程序将会逐渐消亡,而这正是MFC(Microsoft Foundation Class)库的主要应用领域。但是,人们对于"丰富的客户端用户界面"的需求不可能一下子消失。许多人认为,PC机和分布式技术的出现将是"大型机和小型机上集中式处理时代"的终结。它表明PC和分布式技术只是增加了可用的计算资源。Web服务的.NET架构,以及服务器提供的丰富的用户界面只是为软件开发人员增加了可用的选择而已。丰富的客户端用户界面对于许多类型的应用而言仍将非常重要,在一个系统中,既需要这些使用客户端用户界面的应用,同样也需要使用其他类型的用户界面(比如服务器产生的用户界面)的应用。
MFC是一个非常成熟又比较容易理解的技术,它拥有大量的第三方扩展。至少在相当长一段时间内,MFC仍将是编写功能全面的独立应用程序的最有效途径。本书的一大部分内容将集中在MFC风格的开发上,但是我们也将涉及Windows Forms的开发,这是编写客户端用户界面的.NET途径。
当然,接下去的问题是:COM的地位何在?COM已经解决了许多与分布式处理有关的问题,但是它有一些严重的缺陷--其中最根本的缺点都与组件的版本和类型信息有关。Microsoft的.NET架构是以公共语言运行库为基础的。该运行库作为.NET中的互操作性标准,取代了COM的地位。我们将在本书的第六部分介绍.NET和公共语言运行库。
COM和公共语言运行库分别代表了实现组件结构的不同途径,但是Microsoft已经将它们有机地融合起来,使之能够共存。在绝大多数的情况下,COM和运行库之间的互操作性是非常平滑的。在.NET的世界中,您可能不会发现自己正在使用COM作为组件结构。然而,您可能会发现自己正在使用ATL(Active Template Library,活动模板库)服务程序,这是一种高性能的编写Web站点的方法。
在本书的这一版中,我已经更新了有关ATL和MFC的内容,因为您将会发现,它们仍然非常有用。更重要的是,我将向您演示,在迁移到.NET世界中的时候,如何平衡您的传统代码(这听起来比"遗留代码"要好听,是不是?)。
托管的C++和C#
.NET平台新引入了一种类似C++的语言,称为C#。C#是一种curly-brace-oriented的语言,但没有C++的所有头痛之处。C#之所以如此有吸引力,很大程度上在于它去掉了C++中一些有问题的语言元素(比如原始的指针管理),同时又保留了C++有用的特性(比如虚函数)。C#编译器最终会产生托管的代码--运行在公共语言运行库之上的一种代码。
不过,整个世界不会在一夜之间完全转换到C#上来。仍然会有大量的C++代码还不能转换。而且对于开发人员而言,他们也需要花一定的时间才能完全适应C#。同时,.NET也引入了对于C++的扩展,允许产生托管的代码(即运行在公共语言运行库之上的代码)。C++的托管扩展将有助于减轻开发.NET平台上的软件的负担,因为这些扩展使得您可以快速地更新现有的代码,以便在.NET环境下工作。为了利用C++来开发托管的代码,这意味着您需要在自己的代码中加上各种关键字。最后,当编译器的编译工作完成之后,C#和托管的C++可以被混合到同样的可执行代码中。在.NET世界中,您可能会发现,您将用C#编写新的组件,同时利用托管的C++在原有C++代码的基础上增加.NET特性。
.NET和Java平台
最近几年,我们看到Java程序设计语言和平台已经引起了业界广泛的关注。Java提供了一种有用的方法用来分发客户端的用户界面(通过Java applet(小程序)),并且通过Java Enterprise Edition来提供企业解决方案,所以Java为Internet开发人员提供了极大的便利。现在,.NET已经成为目前最好的Internet开发平台。Java平台要求您使用Java语言编写所有的代码,.NET则与此不同,它允许您使用多种语言达到同样的机器指令集。您可以使用C++(这是本书的焦点所在)和它的托管扩展、Visual Basic .NET、C#,甚至大量第三方的.NET语言来编写您的程序。一旦您编写了源代码,它就被编译成中间语言,并最终在运行之前变成机器代码。因为.NET代码是由一个运行库托管的,所以您可以由此获得许多好处,比如垃圾回收和更好的代码安全性。
本书的适用对象
Visual C++ .NET具有复杂的应用程序框架(application framework)以及对于.NET的支持,它是为专业程序员准备的,本书也是如此。我假定您已经精通了C语言--不用参考手册就可以编写一条if语句。我还假定您已经接触过C++语言--至少学过这门课程或者读过C++的书籍,但可能还没写过太多的代码。您可以将C++语言的学习和法语的学习做比较。您可以在学校里学习法语,但您不可能说得很流利,除非您去一个说法语的国家,并开始与那里的人进行交谈。
Visual C++中的向导(wizard)可以为您节约时间,并且保证准确性,但是程序员必须要理解这些向导生成的代码,并且最终他们必须理解MFC和ATL库的结构、Windows操作系统的内部工作机理以及.NET的工作方式。然而,我并不假定您已经了解Windows和.NET程序设计。我知道,精通C的程序员能够以MFC的方式和.NET的方式学习Windows。此外,虽然了解C++比了解Win32 API更重要,但您还是应该知道如何运行Windows的以及基于Windows的应用程序。
即使您已经对Win32 API或者MFC库有经验了,这本书仍然可供您学习。首先,您可以学到一些新的特性,比如多顶级窗口界面(MTI,Multiple Top-Level Interface)和Visual C++ .NET向导。如果您尚未领会组件对象模型 (Component Object Model,简称COM),则本书介绍的一些重要理论会让您理解ActiveX控件。您也可以学习ATL服务程序和OLE DB模板,而且还可以学到针对Internet的C++程序设计(包括动态HTML)。最后,本书也包括了您在别处难以找到的新的有关托管C++扩展的内容。
本书没有包括的内容
序言回到顶部↑
《微软.NET程序员系列》丛书序
自2000年6月微软宣布自己的.NET战略以来,在不到两年的时间里,.NET已经从战略变成现实。.NET带来了全新的、快速而敏捷的企业计算能力,也给软件开发商和软件开发人员提供了支持未来计算的高效Web 服务开发工具。作为微软.NET战略的重要组成部分--Visual Studio .NET (中文版)已经于2002年3月22日正式在中国推出。
Visual Studio .NET 是一个功能强大、高效并且可扩展的编程环境。它充分展现了应用程序开发的潜能,并提供了生成应用程序所需的工具和技术。这些应用程序将给当今的企业、机构提供强大的支持,并推动下一代基于 XML Web服务软件的发展。
有了 Visual Studio .NET,那些对全世界数百万的专业和业余程序员来说曾一度极端复杂、费时费力,甚至让人望而生畏的编程任务现在已不再神秘。更重要的是,Visual Studio .NET 使开发人员能运用既有的技能和知识来迎接新的编程挑战。
在10年前,Visual Basic 1.0成为数以百万计的开发人员的革命性的应用程序开发语言。现在,Visual Studio .NET 为未来的10年做好了准备。
微软出版社为了配合Visual Studio .NET的推广以及.NET技术的普及,邀请Visual Studio .NET项目开发组的核心开发人员和计算机图书专业作家精心编写了英文版《微软.NET程序员系列》丛书;该丛书自面市以来,在美国图书销量排行榜上一直高居前列,颇受好评,成为程序开发人员和网络开发人员了解.NET技术的权威工具书。尤其是《Microsoft .NET Framework 程序设计》一书,长期占据美国及欧洲此类书籍的排行榜冠军位置,程序开发人员不可不读此书。
清华大学出版社为了满足中国广大程序开发人员、网络开发人员学习最新技术的渴望,在微软出版社的配合下,从《微软.NET程序员系列》这套丛书中精选了50余本翻译成中文,以满足国内广大读者的需要。这套丛书阵容庞大(且在不断扩充之中),几乎涵盖了.NET技术及其应用的各个方面;也正因为如此,翻译和编辑加工的工作量也大得惊人。但为了保持国外优秀技术图书的魅力,同时使读者领会新技术的真谛,本丛书的翻译和编辑都是经过严格筛选的、具有很高的翻译水平或丰富编辑经验的技术人员;另外,我们还聘请微软公司Visual Studio .NET产品组的技术专家审读每一本书,确保在技术上准确无误。
相信这套丛书定会帮助程序开发人员、网络开发人员以及那些具有一定编程基础的中、高级读者,快速、全面地掌握.NET技术,协助他们为技术生涯的下一个10年做好准备,为培养新一代软件人才,并推动中国软件产业的快速发展起到积极的作用!
这套丛书分为3个子系列:技术内幕系列、语言参考系列和程序员系列。目前,已出版和在编的共有36本,已从2002年6月份起陆续和读者见面。
● 技术内幕系列
目前共有7本:
· 《Visual C++ .NET技术内幕(第6版)》
本书是Visual C++和MFC开发的经典著作。它秉承了第4版和第5版的风格,已根据该编程语言的最新版本Visual C++ .NET进行了全面更新和补充,是.NET时代的C++程序员必读的教材。此外,本版仍由第4版译者潘爱民先生翻译。
· 《Microsoft .NET Compact Framework技术内幕》
· 《Visual Basic .NET技术内幕》
· 《Visual C# .NET技术内幕》
· 《ADO.NET技术内幕》
· 《Microsoft .NET程序设计技术内幕》
· 《Visual J# .NET技术内幕》
● 语言参考系列
自2000年6月微软宣布自己的.NET战略以来,在不到两年的时间里,.NET已经从战略变成现实。.NET带来了全新的、快速而敏捷的企业计算能力,也给软件开发商和软件开发人员提供了支持未来计算的高效Web 服务开发工具。作为微软.NET战略的重要组成部分--Visual Studio .NET (中文版)已经于2002年3月22日正式在中国推出。
Visual Studio .NET 是一个功能强大、高效并且可扩展的编程环境。它充分展现了应用程序开发的潜能,并提供了生成应用程序所需的工具和技术。这些应用程序将给当今的企业、机构提供强大的支持,并推动下一代基于 XML Web服务软件的发展。
有了 Visual Studio .NET,那些对全世界数百万的专业和业余程序员来说曾一度极端复杂、费时费力,甚至让人望而生畏的编程任务现在已不再神秘。更重要的是,Visual Studio .NET 使开发人员能运用既有的技能和知识来迎接新的编程挑战。
在10年前,Visual Basic 1.0成为数以百万计的开发人员的革命性的应用程序开发语言。现在,Visual Studio .NET 为未来的10年做好了准备。
微软出版社为了配合Visual Studio .NET的推广以及.NET技术的普及,邀请Visual Studio .NET项目开发组的核心开发人员和计算机图书专业作家精心编写了英文版《微软.NET程序员系列》丛书;该丛书自面市以来,在美国图书销量排行榜上一直高居前列,颇受好评,成为程序开发人员和网络开发人员了解.NET技术的权威工具书。尤其是《Microsoft .NET Framework 程序设计》一书,长期占据美国及欧洲此类书籍的排行榜冠军位置,程序开发人员不可不读此书。
清华大学出版社为了满足中国广大程序开发人员、网络开发人员学习最新技术的渴望,在微软出版社的配合下,从《微软.NET程序员系列》这套丛书中精选了50余本翻译成中文,以满足国内广大读者的需要。这套丛书阵容庞大(且在不断扩充之中),几乎涵盖了.NET技术及其应用的各个方面;也正因为如此,翻译和编辑加工的工作量也大得惊人。但为了保持国外优秀技术图书的魅力,同时使读者领会新技术的真谛,本丛书的翻译和编辑都是经过严格筛选的、具有很高的翻译水平或丰富编辑经验的技术人员;另外,我们还聘请微软公司Visual Studio .NET产品组的技术专家审读每一本书,确保在技术上准确无误。
相信这套丛书定会帮助程序开发人员、网络开发人员以及那些具有一定编程基础的中、高级读者,快速、全面地掌握.NET技术,协助他们为技术生涯的下一个10年做好准备,为培养新一代软件人才,并推动中国软件产业的快速发展起到积极的作用!
这套丛书分为3个子系列:技术内幕系列、语言参考系列和程序员系列。目前,已出版和在编的共有36本,已从2002年6月份起陆续和读者见面。
● 技术内幕系列
目前共有7本:
· 《Visual C++ .NET技术内幕(第6版)》
本书是Visual C++和MFC开发的经典著作。它秉承了第4版和第5版的风格,已根据该编程语言的最新版本Visual C++ .NET进行了全面更新和补充,是.NET时代的C++程序员必读的教材。此外,本版仍由第4版译者潘爱民先生翻译。
· 《Microsoft .NET Compact Framework技术内幕》
· 《Visual Basic .NET技术内幕》
· 《Visual C# .NET技术内幕》
· 《ADO.NET技术内幕》
· 《Microsoft .NET程序设计技术内幕》
· 《Visual J# .NET技术内幕》
● 语言参考系列
相关资源回到顶部↑
· 【推荐】众多高校学子口口相传,他们共同的选择--华清远见嵌入式学院(嵌入式Linux就业课程、3G手机开发就业课程,通过入学测试即签100%就业协议,4个月集中实训,世界500强企业成功就业保障!!!)· 【亚嵌教育 嵌入式培训专家】(嵌入式培训,嵌入式Linux培训,ARM培训,Linux培训,3G培训,Android培训,WINCE培训,DSP培训,FPGA培训,嵌入式就业培训)
· InfoQ中文站论坛:.NET讨论区(InfoQ .NET)
· 程序员的7种武器(正则表达式、编程语言、数据库、算法、软件调试、开发环境)
· WCF的开山之作 WCF画卷的清明上河图(WCF WF WPF)


点击看大图






加载中...