VS2008中 ATL CLR MFC Win32 區別
轉自:http://www.cnblogs.com/myitm/archive/2010/10/07/1845209.html
ATL用於編寫COM程式,CLR是.NET的公共語言執行庫,MFC是指MFC類庫,MFC程式是用這些類庫做出的程式,WIN32常規就是不用MFC,使用API函式編的程式。 MFC、ATL和CLR是VC2005內建的3大庫,涵蓋了windows的各種開發方法和開發應用。當然關於C++開發的庫不止這3個,不過這3個是微軟推薦。從程式設計所處層次而言,WIN32為最底層,其次是MFC.然後是CLR. WIN32 winAPI MFC MFC類庫 CLR .net庫
1. WIN32常規就是不用MFC,使用API函式編的程式。
2. MFC庫有很多年的歷史了,MFC是基於Windows API 的簡單封裝。其核心架構基於"Document/View"架構(20年前被認為很潮流的一種概念)和訊息流動機制。這個庫自從VC6開始到現在都沒有多 大改動。MFC封裝的範圍包括GUI,IO,資料庫,網路程式設計等等方面。但是很多系統開發必須的api都沒有封裝,這樣開發者一般都在MFC的基礎上自己 處理與業務相關的任務。事實上很多人用MFC只是利用其GUI部分的封裝。這個庫GUI處理的效率也並不是很高,有時候與UI處理相關的程式碼會佔到整個項 目的一半甚至更多。總的來說,這是一個垂老的庫,微軟在10年以來,除了對MFC進行修修補補以外,沒有進行大的改進或者更新。如果你問MFC還會活多 久?恩,這是個問題。如果有一天MFC不在了,微軟在這個級別上並沒有其他產品能夠代替它。
3. CLR庫是隨著.Net Framework 2 和VS2005一起釋出的庫,其核心的實現和C#,VB.net 一樣。都是基於公共語言執行庫。.Net Framework封裝了大量系統的api,以類庫的形式提供給開發者。C++中的CLR庫可以使用其中和本機程式碼有關的部分,目前C++還不能涉及到 asp.net部分。CLR庫中的C++顛覆了很多標準C++的傳統,甚至可以說,這裡的C++不是C++,只是披著C++的皮幹其他的事。這裡的C++ 更像是C#或者類似的語言。所以這裡不叫C++,而叫做C++/CLI,值得一提的是,有關C++/CLI的部分目前還沒有被標準C++接受,最近微軟有 關C++/CLI標準化的提案被C++標準化委員會拒絕了。所以C++/CLI目前還是微軟的一家之言。
4. ATL用於編寫COM程式。ATL庫貌似也年紀很大了,至少在我接觸到VC的時候就有它的存在了。這個庫可以追溯到COM元件,因為ATL的目的就是幫助 開發者更好的與COM互動。到底什麼時候有COM這個東西的 ?我也不知道,我只知道COM是有16位版本的,在Windows升級到32位的時候COM也隨著升級到了32位。COM就像一些封裝好的類物件一樣,通 過封裝系統的api,提供一些標準的方法來給你使用。所以系統中有什麼元件,就可以在ATL中用什麼方法 。所以ATL不止可以寫ActiveX,也可以有window,也可以有其它。有時候有些微軟釋出的功能是隻以COM元件的形式釋出的,例如MSXML, 這時候MFC就不適合,是要ATL來處理的。但是ATL在處理UI這方面並不是很強,所以微軟工程師有一個開源的UI 框架,叫做WTL,專門用來處理UI的。ATL庫的缺點是,作為模板庫,在出現錯誤的時候會比較麻煩,出錯提示會牛頭不對馬嘴
相關文章
- mfc和win32區別Win32
- VC++、MFC、COM和ATL的區別C++
- MFC中OnDraw與OnPaint的區別 (轉載)AI
- C Runtime Library來歷, API, MFC, ATL關係API
- VS2008中解決“mfc90ud.dll找不到”問題
- Answers to your MFC/ATL questions from the Visual C++ .NET Product Manager (轉)C++
- Win32/MFC/COM學習推薦書籍Win32
- 在 Win32 Application 和 Win32 Console Application 中使用 MFC (轉)Win32APP
- 微軟MFC的OClient Sample在VS2008中不能正確編譯的問題微軟client編譯
- VS2008 Debug與Release的本質區別
- No MFC 程式設計01 - 最精簡的 win32 程式 (轉)程式設計Win32
- 理解.NET中的CLR原理(二)
- ATL中的Thunk機制學習 (轉)
- vs2008下的MFC程式,怎麼檢測記憶體洩露C程式記憶體洩露
- 理解.NET中的CLR原理(二) (轉)
- 理解.NET中的CLR原理(三) (轉)
- VS2008中解決“cout未知識別符號”問題符號
- C 風格字串,C++string類,MFC,CString類的區別。字串C++
- Win32動態連結庫與靜態連結庫的區別Win32
- SQL Server中CLR安全性詳解SQLServer
- scala中:: , +:, :+, :::, +++的區別
- JavaScript中的“=、==、===”區別JavaScript
- vs2008 MFC 對話方塊 grid++ report 使用經驗總結
- 《NET CLR via C#》---第六章(型別成員,型別的可訪問性,友元程式集,分部型別,CLR呼叫方法指令)C#型別
- 使用CLR函式壓縮(Gzip)ntext型別欄位函式型別
- mysql中!=和is not的區別MySql
- JavaScript中for in 和for of的區別JavaScript
- python 中 is, is not ,==, != 的區別Python
- mysql中“ ‘ “和 “ ` “的區別MySql
- Javascript中“==”與“===”的區別JavaScript
- java中==和equlas區別Java
- Js中for in 和for of的區別JS
- js中“==”與"==="的區別JS
- JavaScript中==和===的區別JavaScript
- 《深入解析ATL》學習手札 -- 第一天 (ATL #1) (轉)
- 深入淺出Win32多執行緒程式設計--之MFC的多執行緒Win32執行緒程式設計
- Android中 @和?區別以及?attr/**與@style/**等的區別Android
- CLR執行原理