原文地址:http://blog.csdn.net/luoweifu/article/details/48816605
上一篇文章帶你玩轉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)活動模板庫是一套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工程,用微軟提供的類庫進行界面程序的快速開發。