上一篇文章帶你玩轉Visual Studio——帶你建立一個工程一文中提到建立一個工程時會有很多的工程類型(圖1),現在將簡單介紹各種類型工程的含義和主要用途。由於這裡包含的工程類型太多,有很多本人也沒有接觸過,有些可能理解的不太對的地方還請諒解。
首先說明一下,如果你的初學者或者C++開發的時間不長,本篇文章的很多內容理解不了是正常的(我當初也不理解)。你可先有大概的概念,等工作(或有實際的項目開發經驗)一兩年後再回來看看也許就明白了。
圖 1:New Project
理解幾個概念
在開講之前先大概理解幾個概念,這是理解後面各種工程含義的基礎。 COM
COM(Component Object Model)元件物件模型是microsoft制定的一個組件軟體標準,跟unix上的CORBA一樣。凡是遵循COM標準開發出來的組件稱為COM組件。目地是實現二進位方式的軟體重用 。在windows平台上,COM的實現形式有DLL(進程內組件)和EXE(進程外組件)2種。 OLE
OLE(Object Linking and Embedding)對象串連與嵌入是微軟的複合文檔技術,可方便實現應用程式之間的通訊。在後來的OLE2中才匯入了 COM,提供了對COM的支援,利用這種技術可開發可重複使用的軟體組件COM。OLE是軟體比較早提出的一種技術。 ATL
ATL(Active Template Library)Active Template Library是一套C++模板庫,常用於開發COM程式和ActiveX程式。要理解ATL技術可從以下兩方面理解:
1.ATL可以說是把COM封裝了一下,象MFC一樣做成一個庫,並有一個嚮導,使COM應用開發儘可能地自動化、可視化,這就決定了ATL只面向COM開發提供支援。
2.ATL因其採用了特定的基本實現技術,擺脫了大量冗餘代碼,使用ATL開發出來的COM應用的代碼簡練高效。
在ATL產生以前,開發COM組件的方法主要有兩種:一是使用COM SDK(COM軟體開發包)直接開發COM組件,另一種方式是通過MFC提供的COM支援來實現。而現在 ATL已經成為Microsoft支援COM應用開發的主要開發工具。 MFC
MFC(Microsoft Foundation Classes)微軟基礎類是微軟提供的一個用於Windows程式開發的基礎類庫。MFC以C++類的形式封裝了Windows的API,並且包含一個應用程式架構,以減少應用程式開發人員的工作量。其中包含的類包含大量Windows控制代碼封裝類和很多Windows的內建控制項和組件的封裝類。 ActiveX
ActiveX是微軟提出的一組使用COM技術使得軟體組件在網路環境中進行互動的技術集,它與具體的程式設計語言無關。作為針對Internet應用開發的技術,ActiveX被廣泛應用於WEB伺服器以及用戶端的各個方面。同時,ActiveX技術也被用於方便地建立普通的傳統型應用程式,此外ActiveX一般具有介面。
ActiveX既包含伺服器端技術,也包含用戶端技術。其主要內容是:
1. ActiveX控制(ActiveX Control);用於向WEB頁面、Microsoft Word等支援ActiveX的容器(Container)中插入COM對象。
2. ActiveX文檔(ActiveX Document);用於在WEB Browser或者其它支援ActiveX的容器中瀏覽複合文檔(非HTML文檔),例如Microsoft Word文檔,Microsoft Excel文檔或者使用者自訂的文檔等。
3. ActiveX指令碼描述(ActiveX Scripting);用於從用戶端或者伺服器端操縱ActiveX控制和Java程式,傳遞資料,協調它們之間的操作。
4. ActiveX伺服器架構(ActiveX Server Framework);提供了一系列針對WEB伺服器應用程式設計各個方面的函數及其封裝類,諸如伺服器過濾器、HTML資料流控制等。
5. 在Internet Explorer中內建Java虛擬機器(Java Virtual Machine),從而使Java Applet能夠在Internet Explorer上運行,並可以與ActiveX控制通過指令碼描述語言進行通訊。 OLE、ActiveX、COM之間的區別
從時間的角度講,OLE是最早出現的,然後是COM和ActiveX;從體繫結構角度講,OLE和ActiveX是建立在 COM之上的,所以COM是基礎;單從名稱角度講,OLE、ActiveX是兩個商標名稱,而COM則是一個純技術名詞,這也是大家更多的聽說ActiveX和OLE的原因。既然OLE是最早出現的,那麼就從OLE說起,自從Windows作業系統流行以來,“剪貼簿”(Clipboard)首先解決了不同程式間的通訊問題(由剪貼簿作為資料交換中心,進行、粘貼的操作),但是剪貼簿傳遞的都是“死”資料,應用程式開發人員得自行編寫、解析資料格式的代碼,於是動態資料交換(Dynamic Data Exchange,DDE)的通訊協定應運而生,它可以讓應用程式之間自動擷取彼此的最新資料,但是,解決彼此之間的“資料格式”轉換仍然是程式員沉重的負擔。對象的連結與嵌入(Object Linking and Embedded,OLE)的誕生把原來應用程式的資料交換提高到“對象交換”,這樣程式間不但獲得資料也同樣獲得彼此的應用程式物件,並且可以直接使用彼此的資料內容,其實OLE是Microsoft的複合文檔技術,它的最初版本只是瞄準複合文檔,但在後續版本OLE2中,匯入了COM。由此可見,COM是應OLE的需求而誕生的,所以雖然COM是OLE的基礎,但OLE的產生卻在COM之前。 COM的基本出發點是,讓某個軟體通過一個通用的機構為另一個軟體提供服務。COM是應OLE 的需求而誕生,但它的第一個使用者卻是OLE2,所以COM與複合文檔間並沒有多大的關係,實際上,後來COM就作為與複合文檔完全無關的技術,開始被廣泛應用。這樣一來, Microsoft就開始“染指”通用平台技術。但是COM並不是產品,它需要一個商標名稱。而那時Microsoft的市場專家們已經選用了OLE作為商標名稱,所以使用COM技術的都開始貼上了 OLE的標籤,雖然這些技術中的絕大多數與複合文檔沒有關係。
====本段內容轉載自《OLE、ActiveX、COM、ATL聯絡與區別》==== 各種工程結構 ATL ATL Project
建立一個基於ATL的工程,用ATL的方式進行COM組件的開發,ATL提供了大量可重用的模板。ATL可用於COM組件的開發,也可用於ActiveX的開發。 CLR Class Library CLR Console Application CLR Empty Project Windows Forms Application Windows Forms Control Library
CLR(Common Language Runtime)是公用語言運行庫,和Java虛擬機器一樣也是一個運行時環境。CLR的核心功能包括:記憶體管理、程式集載入、安全性、異常處理和線程同步,可由面向CLR的所有語言使用。並保證應用和底層作業系統之間必要的分離。CLR/C++是託管的C++程式,資料和代碼是由CLR管理的,調用方不用管記憶體的分配和釋放,CLR好像常用於.net。
這一塊我還真不瞭解,就不說了,怕誤人子弟。。。 General Empty Project
就是建立一個空的工程,不給你添加任何.cpp或.h檔案,不進行任何特殊的設定。 Custom Wizard
就是使用者自訂嚮導,什麼意思呢。比如你每次建一個新的工程時都期望這個工程中有main.cpp、projectDescription.txt這兩個檔案,並且main.cpp中有一個預設的main函數。那麼你可以建一個Custom Wizard工程,並配製好main.cpp、projectDescription.txt檔案及所在目錄結構;然後你每次建立一個新的工程時選擇都基於這個已有的Custom Wizard工程,建立的工程就有自動添加main.cpp、projectDescription.txt檔案了。說白了Custom Wizard就是一個模型,定義工程的預設檔案和預設的配製。 Makefile Project
makefile就是對.cpp和.h等檔案的組織、構建、編譯規則。這個在跨平台開發中會用到,如你開發的程式既要在Windows下編譯也要在Linux、Mac下編譯,一般就會使用makefile的編譯規則。說明:Windows下有一個微軟自己的NMake構建器,因為在VS下makefile檔案中的內容要符合NMake的規則才能夠編譯成功。 MFC MFC ActiveX Control
就是以支援MFC的方式建立ActiveX程式,可快速地開發帶有介面的ActiveX程式。
拓展閱讀《使用VS2010建立MFC ActiveX工程項目》 MFC Application
這個就是你平常開發MFC程式時會用到的工程, MFC(Microsoft Foundation Classes)是微軟提供的一個用於Windows程式開發的基礎類庫,也是快速開發Windows上的傳統型程式一般會選擇的方式。 MFC DLL
它也是建立一個MFC的程式,與MFC Application的不同之處是:MFC Application工程產生的是一個.exe的可執行檔,而MFC DLL工程產生的是一個.dll的動態庫檔案。 Test Test
顧名思義,這就是一個測試工程,可用來進行單元測試、已排序的測試、壓力測試等。 Win32 Win32 Console Application
這個就是你最熟悉的控制台應用程式了,編譯成功,運行時會出現一個黑色的命令列視窗。上篇文章帶你玩轉Visual Studio——帶你建立一個工程的範例也就是建立的這個類型的工程。 Win32 Project
MFC其實是對Windows API進行的一種封閉,使其具有物件導向的特性。而這個Win32 Project工程就是以直接調用Windows API的方式,使用Windows SDK開發帶有視窗介面的程式。 說明
其實,像一般的開發常用的工程類型也就幾種:
Win32 Console Application: 控制台應用程式,也是常見的那個黑色命令視窗。
Win32 Project: 直接用Windows API進行Windows傳統型應用程式的開發。
MFC Application: MFC工程,用微軟提供的類庫進行介面程式的快速開發。
上一篇回顧:
帶你玩轉Visual Studio——帶你建立一個工程
下一篇要講述的內容:
帶你玩轉Visual Studio——帶你高效開發