C++/CLI簡介(什麼是C++/CLI) -------C++/CLI 編程系列一

要知道C++/CLI是什麼,首先知道什麼是CLI

 

一、CLI簡介

 

CLI:(Common Language Infrastructure,通用語言框架)提供了一套可執行代碼和它所運行需要的虛擬執行環境的規範。更通俗的我們可以說它是一個虛擬平臺,是操作系統和應用程序間的一層抽象。微軟的.NET的基礎CLRCommon Language Runtime,通用語言運行時)就是CLI的一個實例。

  

CLI主要的成部分有:CTSMetadataCLSVES

          CTSCommon Type System,通用型系):是CLI的基,它是一個範,定了所有CLI平臺上可以定型的集合,所有基於CLI型都是CTS的一個子集,目前C++/CLICTS描述支持最好的高級語言。

          Metadata(元數據):用來描述和引用CTS型,元數據以一獨立於任何言的形式存,正是元數據予了建自描述的能力。

          CLSCommon Language Specification,通用範)是用以確保所有CLI言能互操作的一組規則,它定了所有CLI言都必支持的一個最小功能集(一個CTS的子集)。CLI言可以選擇自己CTS的一部分的映射,但是了確保不同言的交互,至少應該支持CLS所定的最小功能集。

          VESVirtual Execution System,虛擬執行系CLI程序提供了一個在各可能的平臺上加行託管代的虛境,只是一個範,比如微momo就各有自己的實現.NETCLRJITGC應該屬於此範

 

.NET Framework是微軟對CLI的一個實現,當然也是目前最好的實現.NET Framework主要包含CLRBCLCLR(實時通用語言)是核心也即CLI實現BCL是一套通用的代碼庫,可以被所有的.NET言(C#, VB.NET, C++/CLI)程序所使用。Visual C++2005C++/CLI的實現。

 

二、什麼是C++/CLI

 

 

 

 

 

 

 

其實C++/CLI除了包含ISOC++CLI擴展,它之所以強大的更重要的原因就是它實現了ISOC++.NET的無縫連接。C++/CLI支持對本地ISOC++編程和.NET託管編程的無縫集成,不是簡單的混合,不僅能夠像.NET調用windows API一樣通過P/Invoke來實現函數互調,而且可以實現類型class級和ISOC++.NET類庫的相互使用,更強的是能夠實現類型的混合。爲了實現無縫連接,絕大多數的以前的ISO C++代碼編譯後將得到託管代碼,部分不能編譯爲託管IL的採用P/Invoke調用實現。代碼託管,但是數據並不託管,原來ISOC++中本地堆內的數據仍位於本地堆中。

C++/CLICLI:Common Language Infrastructure)是一門用來代替C++託管擴展(下文使用MC++指代)新的語言規範。重新簡化了C++託管擴展的語法,提供了更好的代碼可讀性。和微軟.NET的其他語言一樣,微軟向ECMA提交了C++/CLI的標準。C++/CLI現在可以在Visual C++ 2005上開發。C++/CLI的部分特性已經申請了專利。

 

三、C++/CLI給我們提供了什麼?

 

      優雅流暢的語法和文法--C++/CLIC++開發人員書寫託管代碼提供了一種非常自然的感覺,並且它提供了非託管代碼到託管代碼的平滑過度。以前所謂的"雙重底線"問題現在已經蕩然無存。

      一流的CLI支持--CLI特色,例如屬性、碎片集合和屬類得到了直接支持,此外,C++/CLI還准許將這些特色用於本地非託管的類。

      一流的C++類支持--C++特色,例如模板和析構函數對於拖管和非拖管類繼續有效。實際上,C++/CLI是你可以"表面上"在棧或C++本地堆上聲明一個.NET類型唯一的.NET語言。

      .NETC++之間的溝壑上架起了一座橋樑--C++開發人員在抨擊BCL時不再象離開水的魚。

      C++/CLI編譯器產生的可執行文件完全是可校驗的。

 

 

四、使用C++/CLI我們可以做什麼

 

可以簡單的從它所包含的三部分內容來解釋:

      ISOC++C++/CLICLI擴展的基礎,C++/CLI對以前的ISOC++部分完全進行了保留,完全兼容,所以ISOC++可以做的,現在C++/CLI仍然可以繼續,那有人說這個就是ISOC++,那麼我也告訴你是C++/CLI, 因爲它是被編譯爲IL代碼,這時我們可以用來開發遊戲和圖形處理軟件等,但是如果是要開發系統或底層,這時需要將代碼編譯爲本地代碼,其實這時的C++/CLI就是ISOC++了;

      CLI.NET實現的擴展,這部分我們可以充分地使用.NET所帶來的優勢,比如龐大的類庫和高效的UI快速開發能力;

      ISOC++.NET的集成,通過這部分,更好地補充了以前的本地代碼和.NET代碼的交互的能力,降低的集成的難度,使得可以更加充分地利用各語言和開發人員的優勢。

 

五、學習C++/CLI所需要的基礎

 

    C++/CLI包含了ISOC++和對其的.NET的擴展,看這兩部分,一個是ISOC++,另一個是在.NET的擴展,可見基礎就是ISOC++,這也正是我這裏指出的本系列所要求的基礎。

 

前面雖然提到C++/CLI包含ISOC++和其擴展,但是考慮到ISOC++是個很大的內容和已經存在有大量的書籍介紹,所以本系列着重介紹ISOC++.NET的擴展部分。

 

C++/CLI是靜態C++對象模型到CLI的動態組件對象編程模型的捆綁,或者說C++/CLIISOC++.NET的擴展,是ISOC++.NET的無縫結合。簡而言之,它就是你如何用C++.NET中編程,而不是C#Visual Basic.NET

發佈了23 篇原創文章 · 獲贊 107 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章