Visual C++.NET(2008)典型案例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 Visual C++.NET概述

随着计算机网络的发展及Internet的普及,基于Web浏览的应用程序变得越来越重要。为了能够在Web应用上占一席之地,Microsoft于2000年推出了.NET计划,并不断发展.NET以计划将Internet作为构建操作系统的基础。Microsoft的.NET平台提供创建整个XML Web服务的统一的开发环境Microsoft Visual Studio.NET,它是用于快速建立企业级Web应用程序的集成开发环境。其中,该开发环境包含了Visual C++、Visual Basic、Visual C#和Visual J#等的开发工具。

1.1.1 了解.NET框架

.NET是Microsoft面向XML Web服务的平台。XML Web服务允许应用程序通过Internet进行通信和共享数据,而不管所采用的是哪种操作系统、设备和编程语言。

其中,.NET框架(.NET FrameWork)是.NET的核心。.NET框架是由多个组件组成的庞大的框架,它执行应用程序和Web服务(包括类库,称为.NET框架类库或FCL),并提供安全性及许多其他的编程功能。使用.NET开发的应用程序都需要在.NET框架下运行。

.NET框架的体系结构包括五大部分:程序设计语言及公共语言规范(CLS)、应用程序平台(ASP.NET、Windows窗体等)、ADO.NET及类库、公共语言运行时(CLR)和程序开发环境(Visual Studio.NET),如图1.1所示。

● 公共语言规范(Common Language Specification,CLS):定义了各种语言间的互操作性规则,是许多应用程序互用的所有语言的通用功能,如图1.2所示。

● 应用程序平台:主要包括ASP.NET应用程序和Windows Forms应用程序,其中ASP.NET应用程序主要用于构建基于Internet的应用程序。而Windows窗体用于创建基于CLR的Windows图形用户界面的窗口应用程序。

● ADO.NET:主要用于操作存储在关心型数据库管理系统(DMBS)中的数据,它提供了对关系数据、XML和应用程序数据的访问,是.NET框架中的重要组成部分。

● 基础类库(Basic Class Library):.NET框架的基础类库提供许多类与接口,包括ADO.NET、XML、IO、网络、调试、安全和多线程等,这些类库都是以命名空间的方式来组织的。

● 公共语言运行时(Common Language Runtime,CLR):CLR的作用是负责执行程序,并提供内存管理、线程管理、安全管理、异常处理、通用类型系统、生命周期监控等的核心服务。

● 编程工具开发环境:Visual Studio.NET是一套多语言系列的开发工具,使用Visual Studio.NET可以创建Windows平台下的Windows应用程序和网络应用程序,以及创建网络服务、智能设备应用程序、Office插件等。

图1.1 .NET框架的体系结构

图1.2 公共语言规范(CLS)

在.NET框架之上,无论采用哪种编程语言编写应用程序,都首先被编译成微软中间语言(Microsoft Intermediate Language,IL),然后IL经过一个被称做JIT的(Just In Time)编译器编译成本地CPU可执行的机器码。

随着.NET技术的不断发展,.NET FrameWork的发展也经历了几个阶段,从早期的.NET FrameWork 1.0、1.1发展到.NET FrameWork 2.0标志着.NET技术走向成熟,功能也更加强大。在2008年,随着Microsoft推出Visual Studio 2008开发平台,.NET FrameWork又由2.0更新为3.0和3.5。.NET FrameWork 3.0、3.5是在.NET FrameWork 2.0的基础上进行扩展,增加了很多新特性,如WCF、WPF、WF、LINQ、AJAX等。

1.1.2 托管C++代码

托管是.NET中一个专门的概念,它仅仅倡导一种新的编程理念。使用.NET框架编写程序代码通常被称为托管代码(Managed Code),而这些代码被编译后的程序在执行时需要依赖CLR(如自动垃圾回收、运行库类型检查、安全支持等)。使用托管C++代码,就意味着这些代码能够被CLR管理,并能开发出具有垃圾自动收集、程序间相互访问等新特性的.NET框架应用程序。

.NET框架是由彼此独立而又相关的两部分组成的:CLR和基础类库。其中,CLR用于为应用程序提供一系列服务,而基础类库提供了CLR功能的实现方法。.NET框架中的大部分特性(如垃圾收集、版本控制、线程管理等)都使用了CLR提供的服务。

这样,为CLR编写及使用CLR服务的代码被称做托管代码,而那些未使用CLR服务的代码被称做非托管代码。

当然,应用程序可以完全采用托管代码进行实现,这类应用程序的所有行为都需要依赖CLR及.NET框架类库的支持。另外,应用程序也可以既使用托管代码又可以使用非托管代码来实现。托管应用程序的创建过程如图1.3所示。

图1.3 托管应用程序的创建过程

由于C++并不是为.NET平台设计的语言,所以为了能够在托管环境中应用C++,Microsoft引入了“托管扩展”的概念来扩充C++,也就是托管的C++扩展。托管的C++扩展在原C++语言的基础上增加了一些新的关键字,以说明使用这些扩展的C++可以编写出.NET代码并调用.NET框架类库,如__gc、__abstract、__value等。

然而,以这种方式实现的托管C++在语法上比较晦涩。例如,在非托管C++和托管C++语法中的指针都通过*符号表示,但是托管C++在语法中的指针实际上是对象的一个引用,它与非托管C++中的指针在本质和行为上是完全不同的。由于这些原因,微软在原C++的基础上提出了C++/CLI语言,以提供在.NET上进行托管编程的扩展。