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

來源:互聯網
上載者:User

From: http://blog.csdn.net/Eric_Jo/archive/2009/05/14/4184916.aspx

要知道C++/CLI是什麼,首Crowdsourced Security Testing道什麼是CLI。

一、CLI簡介

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

 

CLI主要的組成部分有:CTS,Metadata,CLS和VES。

★          CTS(Common Type System,一般型別系統):是CLI的基礎,它是一個類型規範,定義了所有CLI平台上可以定義的類型的集合,所有基於CLI的語言類型都是CTS的一個子集,目前C++/CLI是對CTS描述支援最好的進階語言。

★          Metadata(中繼資料):用來描述和引用CTS定義的類型,中繼資料以一種獨立於任何語言的形式儲存,正是中繼資料賦予了組建自描述的能力。

★          CLS(Common Language Specification,通用語言規範):是用以確保所有CLI語言能夠互操作的一組規則,它定義了所有CLI語言都必須支援的一個最小功能集(一個CTS的子集)。各CLI語言可以選擇自己對CTS的一部分的映射,但是為了確保不同語言的互動,至少應該支援CLS所定義的最小功能集。

★          VES(Virtual Execution System,虛擬執行系統):為CLI程式提供了一個在各種可能的平台上載入和執行Managed 程式碼的虛擬機器環境,只是一個規範,比如微軟和momo就各有自己的實現。.NET的CLR的JIT和GC應該屬於此範圍。

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

二、什麼是C++/CLI

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

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

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

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

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

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

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

⑤      C++/CLI編譯器產生的可執行檔完全是可校正的。

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

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

①      ISOC++是C++/CLI對CLI擴充的基礎,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++/CLI是ISOC++在.NET的擴充,是ISOC++和.NET的無縫結合。簡而言之,它就是你如何用C++在.NET中編程,而不是C#或Visual Basic.NET。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/Eric_Jo/archive/2009/05/14/4184916.aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.