VC++、MFC、COM和ATL的区别
From: http://hi.baidu.com/huqingshuye/blog/item/c55bd12ca5fa1b5b4ec2263f.html
一、什么是MFC
?? ?微軟基礎類(Microsoft Foundation Classes),實際上是微軟提供的,用于在C++環境下編寫應用程序的一個框架和引擎,VC++是WinOS下開發人員使用的專業C++ SDK(SDK,Standard SoftWare Develop Kit,專業軟件開發平臺),MFC就是掛在它之上的一個輸助軟件開發包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區別:C++是一種程序設計語言,是一種大家都承認的軟件編制的通用規范,而VC++只是一個編譯器,或者說是一種編譯器+源程序編輯器的 IDE,WS,PlatForm, MFC同 BC++集成的VCL一樣是一個非外掛式的軟件包,類庫,只不過MFC類是微軟為VC++專配的)。MFC是Win API與C++的結合。
最后要明白MFC不只是一個功能單純的界面開發系統,它提供的類絕大部分用來進行界面開發,關聯一個窗口的動作,但它提供的類中有好多類不與一個窗口關聯,即類的作用不是一個界面類,不實現對一個窗口對象的控制(如創建,銷毀),而是一些在WinOS(用MFC編寫的程序絕大部分都在WinOS中運行)中實現內部處理的類,如數據庫的管理類等。
二、什么是COM
?? ?所謂COM(Componet Object Model,組件對象模型),是一種說明如何建立可動態互變組件的規范,此規范提供了為保證能夠互操作,客戶和組件應遵循的一些二進制和網絡標準。通過這種標準將可以在任意兩個組件之間進行通信而不用考慮其所處的操作環境是否相同、使用的開發語言是否一致以及是否運行于同一臺計算機。
COM的優點,首先:用戶一般希望能夠定制所用的應用程序,而組件技術從本質上講就是可被定制的,因而用戶可以用更能滿足他們需要的某個組件來替換原來的那個。其次,由于組件是相對應用程序獨立的部件,我們可以在不同的程序中使用同一個組件而不會產生任何問題,軟件的可重用性將大大的得到增強。第三,隨著網絡帶寬及其重要性的提高,分布式網絡應用程序毫無疑問的成為軟件市場上越來越重要的買點。組件價構可以使得開發這類應用程序的過程得以簡化。
三、什么是ATL
ATL是ActiveX Template Library的縮寫,它是一套C++模板庫。使用ATL能夠快速地開發出高效、簡潔的代碼,同時對COM組件的開發提供最大限度的代碼自動生成以及可視化支持。
在ATL產生以前,開發COM組件的方法主要有兩種:一是使用COMSDK直接開發COM組件,另一種方式是通過MFC提供的COM支持來實現。
直接使用COMSDK開發COM組件是最基本也是最靈活的方式。通過使用Microsoft提供的開發包,我們可以直接編寫COM程序。但是,這種開發方式的難度和工作量都很大,一方面,要求開發者對于COM的技術原理具有比較深入的了解;另一方面,直接使用COMSDK要求開發人員自己去實現COM應用的每一個細節,完成大量的重復性工作。這樣做的結果是,不僅降低了工作效率,同時也使開發人員不得不把許多精力投入到與應用需求本身無關的技術細節中。雖然這種開發方式對于某些特殊的應用很有必要,但這種編程方式并不符合組件化程序設計方法所倡導的可重用性,因此,直接采用COMSDK不是一種理想的開發方式。
使用MFC提供的COM支持開發COM應用可以說在使用COMSDK基礎上提高了自動化程度,縮短了開發時間。MFC采用面向對象的方式將 COM的基本功能封裝在若干MFC的C++類中,開發者通過繼承這些類得到COM支持功能。為了使派生類方便地獲得COM對象的各種特性,MFC中有許多預定義宏,這些宏的功能主要是實現COM接口的定義和對象的注冊等通常在COM對象中要用到的功能。開發者可以使用這些宏來定制COM對象的特性。
四、總結
對于程序員來說,還有一個區別就是ATL要求你懂得更多的COM知識,這樣你才能直接使用ATL來編寫COM組件或者控件,而MFC甚至不要求你知道COM是個什么東西就能寫出一個ActiveX控件來了。此外,如果你編寫的控件有GUI(圖形用戶界面)的話,你最好使用MFC;如果根本不需要GUI,那最好使用ATL編寫,當然你也可以選擇MFC來編寫不可見的控件,但是開銷比ATL大,而執行效率卻小于ATL;但是有時候這種差別所帶來影響可以忽略掉的話,那么我建議你還是用MFC來寫,唯一的理由是它開發起來更簡單,易于調試。
轉載于:https://www.cnblogs.com/joeblackzqq/archive/2011/06/08/2075267.html
總結
以上是生活随笔為你收集整理的VC++、MFC、COM和ATL的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zookeeper安装和使用 windo
- 下一篇: oracle怎样把查询的null转换为0