- Visual C++.NET 2010開發實踐:基于C++/CLI
- 鄭阿奇主編
- 2076字
- 2018-12-27 13:41:28
1.1 .NET與C++/CLI
.NET Framework在Visual Studio 2010開發平臺及微軟其他.NET開發產品中都是核心組件,主要由CLR(Common Language Runtime,公共語言運行時)和.NET Framework類庫兩個核心部分組成。CLR提供了用戶程序執行的環境,而.NET Framework類庫提供了在CLR中執行程序代碼時所需的支持。在編寫.NET程序時可以用C++、C#或者任何其他支持.NET Framework的語言編寫,而這些語言都使用相同的.NET程序庫。
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)。.NET框架的體系結構如圖1.1所示。
● 公共語言規范(Common Language Specification,CLS):CLS定義了各種語言間的互操作性規則,是許多應用程序所有互用語言的通用功能,如圖1.2所示。
● 應用程序平臺:該部分主要包括ASP.NET應用程序和Windows Forms應用程序,其中ASP.NET應用程序主要用于構建基于Internet的應用程序,而Windows窗體用于創建基于CLR的Windows圖形用戶界面的窗口應用程序。
● ADO.NET:ADO.NET主要用于操作存儲在關系型數據庫管理系統(DBMS)中的數據,它提供了對關系數據、XML和應用程序數據的訪問,是.NET框架中重要的組成部分。
● 基類庫(Basice 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技術的不斷發展,.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等。而目前.NET Framework最新版本為4.0,并被集成在Visual Studio 2010開發平臺中。
1.1.2 公共語言運行時
公共語言運行時(Common Language Runtime,CLR)是為執行給定編譯代碼所需外部服務的集合。例如,若使用MFC建立一個應用程序時,那么該程序就需要MFC運行庫;而對于Java應用程序,則需要依靠Java虛擬機等。
CLR是所有.NET應用程序運行時的環境,是所有.NET應用程序都使用的編程基礎。CLR也可以看做是一個在執行時管理代碼的代理,管理代碼是CLR的基本原則,能夠被管理的代碼成為托管代碼,反之稱為非托管代碼。
CLR中最重要的部分是由mscoree.dll庫(又稱為公共對象運行庫執行引擎)表示的。當應用程序引用一個程序集時,首先自動加載mscoree.dll庫,然后由它負責將需要的程序集導入內存。
在.NET框架之上,無論采用哪種編程語言編寫的應用程序,都首先被編譯成中間語言IL(Microsoft Intermediate Language,微軟中間語言,簡稱IL),然后IL再次經過一個JIT(Just In Time,即時編譯)編譯器編譯成為本地CPU可執行的機器碼。.NET編譯器和.NET執行引擎的工作流程圖如圖1.3所示。

圖1.3 .NET編譯器和.NET執行引擎的工作流程圖
在Windows平臺中,CLR帶有三個不同的JIT編譯器:主編譯器、PREJIT和ECONOJIT。其中,主編譯器是默認的編譯器,它主要進行數據流分析并輸出經過優化的本地代碼,所有的中間代碼指令均可被它處理;PREJIT編譯器是建立在主JIT編譯器之上,并且每當一個.NET組件被安裝時它就運行;ECONOJIT編譯器能夠在并不充分優化的前提下,快速完成IL代碼到本地碼的轉換,編譯速度與運行速度都非???。
1.1.3 C++/CLI概述
Visual C++開發小組在對.NET和C++經過仔細考量之后,決定在Visual C++ 2005中重新設計對通用語言運行時庫(CLR)的支持。此項重新設計被稱為“C++/CLI”,它為使用及編寫CLR類型提供更自然的語法。
公共語言運行時庫(CLR)包括了一組規范,CLR是Microsoft .NET的基礎,也是CLI的Microsoft版本。C++/CLI語言設計的目標是為了對CLI提供更自然的C++支持,而Visual C++ 2005以及后續版本的編譯器則在CLR上都實現了C++/CLI。
C++/CLI是一種用來代替C++托管擴展的新的語言規范,它重新簡化了C++托管擴展的語法,并提供了更好的代碼可讀性。和微軟.NET的其他語言一樣,微軟向ECMA提交了C++/CLI的標準。在2005年11月,ECMA正式推出了C++/CLI的標準ECMA-372?,F在可以在Visual C++ 2005、Visual C++ 2008及Visual C++ 2010集成開發環境上使用C++/CLI進行開發。
C++/CLI代表托管和本地編程的結合。在反復過程中,這種結合已經通過源代碼級相對獨立但又相互平等的組件和二進制元素得到了完成,包括混合模式(本地和CTS類型的源代碼級混合,還有一個本地及CLI對象文件的二進制混合),純模式(本地和CTS類型的源代碼級混合,所有的代碼都被編譯為CLI對象文件),本地分類(可以通過一個特定的打包類來保持CTS類型),以及CTS分類(可以保持本地類型為指針)。
C++/CLI是進行.NET編程模式的最佳切入點。對于C++/CLI而言,需要有一個來自C++的遷移路徑,這不僅需要了解C++的底層基礎知識,而且也需要一定的C++編程經驗。
- Fundamentals of Linux
- C++程序設計(第3版)
- iOS 9 Game Development Essentials
- Magento 2 Theme Design(Second Edition)
- Python測試開發入門與實踐
- Full-Stack Vue.js 2 and Laravel 5
- C語言程序設計
- INSTANT Mercurial SCM Essentials How-to
- Java編程技術與項目實戰(第2版)
- 網站構建技術
- 青少年信息學競賽
- Linux C編程:一站式學習
- 動手學數據結構與算法
- Domain-Driven Design in PHP
- 實戰Java高并發程序設計(第2版)