上一篇文章[帶你玩轉Visual Studio——帶你新建一個工程](http://blog.csdn.net/luoweifu/article/details/48692267)一文中提到新建一個工程時會有很多的工程類型(圖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聯系與區別](http://www.jeepshoe.org/804052511.htm)》====
# 各種工程結構
## 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工程項目](http://blog.csdn.net/longhuahaha/article/details/8556964)》
### 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——帶你新建一個工程](http://blog.csdn.net/luoweifu/article/details/48692267)的樣例也就是創建的這個類型的工程。
### Win32 Project
MFC其實是對Windows API進行的一種封閉,使其具有面向對象的特性。而這個Win32 Project工程就是以直接調用Windows API的方式,使用Windows SDK開發帶有窗口界面的程序。
# 說明
其實,像一般的開發常用的工程類型也就幾種:?
**Win32 Console Application:**?控制臺應用程序,也是常見的那個黑色命令窗口。?
**Win32 Project:**?直接用Windows API進行Windows桌面應用程序的開發。?
**MFC Application:**?MFC工程,用微軟提供的類庫進行界面程序的快速開發。
上一篇回顧:?
[帶你玩轉Visual Studio——帶你新建一個工程](http://blog.csdn.net/luoweifu/article/details/48692267)
下一篇要講述的內容:?
帶你玩轉Visual Studio——帶你高效開發