• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 托管C++應用程序開發之概述

    發表于:2007-05-25來源:作者:點擊數: 標簽:發之由于C++應用程序托管
    由于.NET的強大特性,因而作為C++ 程序員 首先想到的就是如何將C++移植到Visual Studio.NET環境中。好在Visual C++.NET本身集成了一個具有.NET新特性的語言:托管C++,它是在C++基礎上建立的,但又和C++有著本質的區別。使用托管C++意味著,我們的代碼可以被
    由于.NET的強大特性,因而作為C++程序員首先想到的就是如何將C++移植到Visual Studio.NET環境中。好在Visual C++.NET本身集成了一個具有.NET新特性的語言:托管C++,它是在C++基礎上建立的,但又和C++有著本質的區別。使用托管C++意味著,我們的代碼可以被CLR所管理,并能開發出具有最新特性如垃圾自動收集、程序間相互訪問等的.NET框架應用程序。
      本系列文章討論什么是托管C++、為什么使用托管C++以及在Visual C++.NET使用托管C++的方法等內容。

      1、什么是托管C++

      托管是.NET的一個專門概念,它倡導一種新的編程理念,因此我們完全可以把“托管”視為“.NET”。由托管概念所引發的C++應用程序包括托管代碼、托管數據和托管類三個組成部分。

       托管代碼

      .Net環境提供了許多核心的運行(RUNTIME)服務,比如異常處理和安全策略。為了能使用這些服務,必須要給運行環境提供一些信息代碼(元數據),這種代碼就是托管代碼。所有的C#、VB.NET、JScript.NET默認時都是托管的,但Visual C++默認時不是托管的,必須在編譯器中使用命令行選項(/CLR)才能產生托管代碼。

       托管數據

      與托管代碼密切相關的是托管數據。托管數據是由公共語言運行的垃圾回收器進行分配和釋放的數據。默認情況下,C#、Visual Basic 和 JScript.NET 數據是托管數據。不過,通過使用特殊的關鍵字,C# 數據可以被標記為非托管數據。Visual C++數據在默認情況下是非托管數據,即使在使用 /CLR 開關時也不是托管的。

       托管類

      盡管Visual C++數據在默認情況下是非托管數據,但是在使用C++的托管擴展時,可以使用“__gc”關鍵字將類標記為托管類。就像該名稱所顯示的那樣,它表示類實例的內存由垃圾回收器管理。另外,一個托管類也完全可以成為 .NET 框架的成員,由此可以帶來的好處是,它可以與其他語言編寫的類正確地進行相互操作,如托管的C++類可以從Visual Basic類繼承等。但同時也有一些限制,如托管類只能從一個基類繼承等。

      需要說明的是,在托管C++應用程序中既可使用托管類也可以使用非托管類。圖1說明了它們之間的關系。

     

      從圖中可以看出在托管C++中,托管類和非托管類是可以相互使用各自的特征,但托管類能夠封裝.NET框架中的組件,且最大限度地使用.NET框架中的特性,而傳統的C++類是使用MFC和ATL來設計的,用來編制基于Windows環境的應用程序。



      2、為什么使用托管C++

      前面已經提到,托管C++是在C++基礎上建立的,用來開發.NET 框架應用程序。那么.NET 框架究竟有哪些新的特性呢?

      Microsoft .NET框架的目的是使用戶更容易建立網絡應用程序和網絡服務。建立在Common Language Runtime的代碼可以用目前任何編程語言進行編寫。Runtime提供了許多服務功能,例如:

      服務框架

      框架包括一套開發人員希望在標準語言庫中存在的基類庫,例如:集合、輸入/輸出、字符串及數據類。另外,基類庫提供訪問操作系統服務如圖畫、網絡、線程、全球化和加密的類。服務框架也包括數據訪問類庫及開發工具,如調試和剖析服務等。

      數據訪問服務

      為了提供對數據的訪問,服務框架包括ActiveX Data Objects+ (ADO.NET)類庫。如同名子所暗示地那樣,ADO.NET由ADO發展而來。ADO+被設計為基于網絡的可擴展的應用程序和服務提供數據訪問服務。ADO.NET為連接的指針風格的數據訪問,同時也為更適合于把數據返回到客戶端應用程序的無連接的數據模板提供高性能的APIs流。

      Win表單

      編寫Windows客戶應用程序的開發人員可使用Win表單應用程序模板以利用Windows豐富的用戶接口特點,包括現在的ActiveX控件和Windows 2000的新特點,如透明的、分層的、浮動窗口,當然也可以選擇傳統的Windows或網絡外觀。由于Win表單和現在的基于Windows表單是極為相似的,因而開發人員不久還會發現Win表單可編程模板和對設計階段的支持是非常直觀的。

      Win表單利用了Microsft .NET框架 Runtime以減少基于Windows的客戶應用程序開發的開銷。只要應用程序和組件是用Win編寫或被Win表單應用程序所使用,那么它們就能被框架安全模板在客戶機上安全地執行。

      除了上述服務和功能外,Microsoft .NET框架還提供基于ASP.NET的網絡服務。這些服務有助于開發代碼的簡化以及提高應用程序的可靠性。.NET 框架包括一套可被開發者用于任何編程語言的類庫,而在此之上的是許多應用程序模板,這些模板專門為開發網絡站點和網絡提供高級組件和服務。

      除“托管”外,Microsoft .NET框架還引入了“組合體(Assembly)”的概念。一個組合體是一組資源和類型,并包括有關這些資源和類型的元數據,也就是一個單元(Module)。元數據包含像類型和資源表之類的信息,這些信息能在組合體外部所調用。元數據還包括有關從屬關系之類的信息,例如組合體建立時的版本號。開發人員可以指定版本策略,以指示運行語言是否裝入系統上已安裝的依賴于組合體的最新版本。

      組合體既可以被一個應用程序所私有,也可被多個應用程序共享。一個組合體的多個版本可以同時配制在同一臺機器上。應用程序配制信息定義了組合體查找的方法,這樣Runtime就能為同時運行的兩個不同的應用程序裝入同一組合體的不同版本,從而消除了由組件版本的不兼容引起的問題,提高了系統整體的穩定性。

      Microsoft .NET框架不僅規定代碼訪問安全,還規定基于角色的安全策略。通過代碼訪問安全機制,開發人員能為應用程序指定完成工作所必需的權限。

      除了可以充分發揮.NET框架新特性外,使用托管C++還有下列好處:

      (1) 由于在同一個應用程序中,甚至是同一個文件中,我們可以同時使用托管C++和傳統的非托管C++來編寫,因而我們可以充分利用兩種C++所帶來的好處,并且可將代碼和組件快速移植到.NET框架中。

      (2) 使用托管可以從任何一個.NET框架兼容語言中調用一個C++組件,也可調用非托管DLL、其它庫以及類等。

      (3) 可以直接從非托管代碼中訪問.NET框架。

      總而言之,使用托管C++是C++程序員編寫.NET框架應用程序最好的一種選擇,在充分理解.NET框架基礎上,避免了使用其他語言如C#、VB.NET所帶來的額外開銷。


      3、使用托管C++項目向導

      在Visual C++.NET中,我們可以使用下列項目向導創建一個托管C++項目:

       托管C++應用程序向導

      該向導用來創建一個支持托管擴展的單獨C++應用程序,使用它還可創建任何類型的應用程序,包括.NET框架客戶應用程序。

       托管C++類庫向導

      該向導用來創建一個支持托管擴展的C++DLL,使用它可以生成一個能被.NET框架應用程序調用的托管類型的組件。

       托管C++空項目向導

      該向導用來創建一個空的托管項目,該項目只含有支持托管擴展的正確編譯和鏈接的開關選項。使用它能將一個已有的C++源文件進入到一個托管環境中。

       托管C++ Web服務向導

      該向導為我們創建兩個項目,一個是C++托管擴展項目,另一個是部署項目。

      下面舉一個例子來說明使用托管C++應用程序向導的一般方法,其步驟很簡單:

      (1) 選擇“文件”ò“新建”ò“項目”菜單,在彈出的“新建項目”對話框中選擇“Visual C++項目”類型,這時在模板列表中顯示出一系列的應用程序項目模板。選擇“托管的C++應用程序”模板類型,將項目工作文件夾定位到自己的文件夾中,如“E:\Visual C++.NET程序”。并在“名稱”框中輸入項目名Ex_ManagedHello,如圖2所示,單擊“確定”按鈕。

     

      (2) 編譯并運行。在DOS命令環境下,顯示出“Hello World”字樣,這是向導創建的默認結果。

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>