VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别
原文轉(zhuǎn)自 https://www.cnblogs.com/zhwl/archive/2012/11/29/2794509.html
ATL是ActiveXTemplateLibrary的縮寫,它是一套C++模板庫(kù)。使用ATL能夠快速地開發(fā)出高效、簡(jiǎn)潔的代碼,同時(shí)對(duì)COM組件的開發(fā)提供最大限度的代碼自動(dòng)生成以及可視化支持。為了方便使用,從MicrosoftVisualC++5.0版本開始,Microsoft把ATL集成到VisualC++開發(fā)環(huán)境中。1998年9月推出的VisualStudio6.0集成了ATL3.0版本。
在ATL產(chǎn)生以前,開發(fā)COM組件的方法主要有兩種:一是使用COMSDK直接開發(fā)COM組件,另一種方式是通過(guò)MFC提供的COM支持來(lái)實(shí)現(xiàn)。
直接使用COMSDK開發(fā)COM組件是最基本也是最靈活的方式。通過(guò)使用Microsoft提供的開發(fā)包,我們可以直接編寫COM程序。但是,這種開發(fā)方式的難度和工作量都很大,一方面,要求開發(fā)者對(duì)于COM的技術(shù)原理具有比較深入的了解(雖然對(duì)技術(shù)本身的深刻理解對(duì)使用任何一種工具都是非常有益的,但對(duì)于COM這樣一整套復(fù)雜的技術(shù)而言,在短時(shí)間內(nèi)完全掌握是很難的);另一方面,直接使用COMSDK要求開發(fā)人員自己去實(shí)現(xiàn)COM應(yīng)用的每一個(gè)細(xì)節(jié),完成大量的重復(fù)性工作。這樣做的結(jié)果是,不僅降低了工作效率,同時(shí)也使開發(fā)人員不得不把許多精力投入到與應(yīng)用需求本身無(wú)關(guān)的技術(shù)細(xì)節(jié)中。雖然這種開發(fā)方式對(duì)于某些特殊的應(yīng)用很有必要,但這種編程方式并不符合組件化程序設(shè)計(jì)方法所倡導(dǎo)的可重用性,因此,直接采用COMSDK不是一種理想的開發(fā)方式。
使用MFC提供的COM支持開發(fā)COM應(yīng)用可以說(shuō)在使用COMSDK基礎(chǔ)上提高了自動(dòng)化程度,縮短了開發(fā)時(shí)間。MFC采用面向?qū)ο蟮姆绞綄OM的基本功能封裝在若干MFC的C++類中,開發(fā)者通過(guò)繼承這些類得到COM支持功能。為了使派生類方便地獲得COM對(duì)象的各種特性,MFC中有許多預(yù)定義宏,這些宏的功能主要是實(shí)現(xiàn)COM接口的定義和對(duì)象的注冊(cè)等通常在COM對(duì)象中要用到的功能。開發(fā)者可以使用這些宏來(lái)定制COM對(duì)象的特性。
隨著Internet技術(shù)的發(fā)展,Microsoft將ActiveX技術(shù)作為其網(wǎng)絡(luò)戰(zhàn)略的一個(gè)重要組成部分大力推廣,然而使用MFC開發(fā)的ActiveXControl,代碼冗余量大,即所謂的“肥代碼”(FatCode),而且必須要依賴于MFC的運(yùn)行時(shí)刻庫(kù)才能正確地運(yùn)行。雖然MFC的運(yùn)行時(shí)刻庫(kù)只有部分功能與COM有關(guān),但是由于MFC的繼承實(shí)現(xiàn)的本質(zhì),ActiveXControl必須背負(fù)運(yùn)行時(shí)刻庫(kù)這個(gè)沉重的包袱。如果采用靜態(tài)連接MFC運(yùn)行時(shí)刻庫(kù)的方式,這將使ActiveXControl代碼過(guò)于龐大,在網(wǎng)絡(luò)上傳輸時(shí)將占據(jù)寶貴的網(wǎng)絡(luò)帶寬資源;如果采用動(dòng)態(tài)連接MFC運(yùn)行時(shí)刻庫(kù)的方式,這將要求瀏覽器一方必須具備MFC的運(yùn)行時(shí)刻庫(kù)支持。總之,MFC對(duì)COM技術(shù)的支持在網(wǎng)絡(luò)應(yīng)用的環(huán)境下也顯得很不靈活。
MFC對(duì)COM和OLE的支持確實(shí)比手工編寫COM程序有了很大的進(jìn)步。但是MFC對(duì)COM的支持還不夠完善和徹底,例如對(duì)COM接口定義的IDL語(yǔ)言,MFC并沒有任何支持,此外對(duì)于近些年來(lái)COM和ActiveX技術(shù)的新發(fā)展MFC也沒有提供靈活的支持。這是由MFC設(shè)計(jì)的基本出發(fā)點(diǎn)決定的。MFC被設(shè)計(jì)成對(duì)Windows平臺(tái)編程開發(fā)的面向?qū)ο蟮姆庋b,自然要涉及Windows編程的方方面面,COM作為Windows平臺(tái)編程開發(fā)的一個(gè)部分也得到MFC的支持,但是MFC對(duì)COM的支持是以其全局目標(biāo)為出發(fā)點(diǎn)的,因此對(duì)COM的支持必然要服從其全局目標(biāo)。從這個(gè)方面而言,MFC對(duì)COM的支持不能很好地滿足開發(fā)者的要求。
對(duì)于程序員來(lái)說(shuō),還有一個(gè)區(qū)別就是ATL要求你懂得更多的COM知識(shí),這樣你才能直接使用ATL來(lái)編寫COM組件或者控件,而MFC甚至不要求你知道COM是個(gè)什么東西就能寫出一個(gè)ActiveX控件來(lái)了。
此外,如果你編寫的控件有GUI(圖形用戶界面)的話,你最好使用MFC;如果根本不需要GUI,那最好使用ATL編寫,當(dāng)然你也可以選擇MFC來(lái)編寫不可見的控件,但是開銷比ATL大,而執(zhí)行效率卻小于ATL;但是有時(shí)候這種差別所帶來(lái)影響可以忽略掉的話,那么我建議你還是用MFC來(lái)寫,唯一的理由是它開發(fā)起來(lái)更簡(jiǎn)單,易于調(diào)試。如果你是一個(gè)COM的門外漢,卻又想使用ATL來(lái)編寫控件,那么建議你先準(zhǔn)備半年時(shí)間(保守估計(jì))來(lái)學(xué)習(xí)COM的理論知識(shí)
簡(jiǎn)單地說(shuō),ATL在網(wǎng)絡(luò)應(yīng)用普及的今天,開發(fā)效果(簡(jiǎn)潔\高效)要比MFC好.但我本人覺得MFC也不差!我一直在用MFC做事!
總結(jié)
以上是生活随笔為你收集整理的VC 中的ATL ActiveX 和 MFC ActiveX 有什么区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 03 python3常见内置函数
- 下一篇: 11. 用Rust手把手编写一个wmpr