• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-250  評(píng)論-20  文章-55  trackbacks-0

            本文假設(shè)你熟悉C++和COM。

            摘要:
            ??? ATL——活動(dòng)模板庫(kù)(The Active Template Library),其設(shè)計(jì)旨在讓人們用C++方便靈活地開發(fā)COM對(duì)象。ATL本身相當(dāng)小巧靈活,這是它最大的優(yōu)點(diǎn)。用它可以創(chuàng)建輕量級(jí)的,自包含的,可復(fù)用的二進(jìn)制代碼,不用任何附加的運(yùn)行時(shí)DLLs支持。
            ??? 由于COM技術(shù)良好的口碑,越來(lái)越多的程序員已經(jīng)走進(jìn)或正在走進(jìn)COM的編程世界。它就像盛夏里的冰鎮(zhèn)啤酒,從來(lái)不會(huì)讓你失望。可惜作為一個(gè)C++程序員來(lái)說(shuō),C++從不與我分享COM的極致以及我對(duì)COM的情有獨(dú)鐘。
            ??? C++與COM之間若即若離,和平共處,一次又一次在每個(gè)對(duì)象中用同樣簡(jiǎn)潔的幾行代碼實(shí)現(xiàn)IUnknown。我敢肯定將來(lái)C++編譯器和鏈接器會(huì)實(shí)現(xiàn)C++對(duì)象和COM對(duì)象之間自然 的無(wú)意識(shí)的對(duì)應(yīng)和映射,目前這個(gè)環(huán)境只存在于實(shí)驗(yàn)室中,因此它肯定不是一個(gè)你我今天可以購(gòu)買的產(chǎn)品。眼下可得到的最接近這個(gè)環(huán)境的東西就是活動(dòng)模板庫(kù)——ATL。

            為什么使用ATL?
            ???
            ATL是在單層(single-tier)應(yīng)用逐漸過(guò)時(shí),分布式應(yīng)用逐漸成為主流這樣一個(gè)環(huán)境中誕生的, 它最初的版本是在四個(gè)C++頭文件中,其中有一個(gè)還是空的。它所形成的出色的構(gòu)架專門用于開發(fā)現(xiàn)代分布式應(yīng)用所需的輕量級(jí)COM組件。作為一個(gè)模塊化的標(biāo)準(zhǔn)組件,ATL不像MFC有厚重的基礎(chǔ)結(jié)構(gòu),省時(shí)好用的庫(kù)使得成百上千的程序員一次又一次輕松實(shí)現(xiàn)IUnknown 和IClassFactory。
            ??? ATL的構(gòu)架并不打算包羅萬(wàn)象,無(wú)所不能。其第一個(gè)版本對(duì)實(shí)現(xiàn)IUnknown,IClassFactory,IDispatch,IconnectionPointContainer及COM枚舉提供非常 到位的支持。第二個(gè)版本除了可以編寫ActiveX控件外,還對(duì)最初的第一個(gè)版本中ATL類進(jìn)行了增強(qiáng)。ATL不提供集合(collections)和串(strings)的處理 ,它假設(shè)你用標(biāo)準(zhǔn)的C++庫(kù)進(jìn)行這些處理;不支持ODBC——這個(gè)世界正在轉(zhuǎn)移到基于COM的不需要包裝的數(shù)據(jù)存取方式;不支持WinSock打包類--sockets本身也是新的東西;ATL也不支持完整的Win32 API打包類——ATL2.0的實(shí)現(xiàn)機(jī)制提供了對(duì)話框和WndProcs支持。此外ATL中沒(méi)有MFC中的文檔/視圖模型。取而代之的是ATL那更具伸縮性和靈活 性的通過(guò)COM接口(如ActiveX控件)與基于UI的對(duì)象之間的溝通模式。
            ??? 使用正確的工具非常關(guān)鍵。如果你正在編寫一個(gè)不可見的COM組件,那么ATL與MFC比起來(lái),從開發(fā)效率,可伸縮性,運(yùn)行時(shí)性能以及可執(zhí)行文件大小各方面來(lái)看,ATL可能 都是最好的選擇。對(duì)于現(xiàn)代基于ActiveX控件的用戶界面,ATL所產(chǎn)生的代碼也比MFC更小更快。另一方面,與MFC的類向?qū)啾龋珹TL需要更多的COM知識(shí)。ATL與STL一樣,對(duì)于單層應(yīng)用沒(méi)什么幫助,而MFC在這方面保持著它的優(yōu)勢(shì)。
            ??? ATL的設(shè)計(jì)在很大程度上來(lái)自STL的靈感,STL與所有ANSI/ISO兼容的C++編譯器一起已經(jīng)被納入成為標(biāo)準(zhǔn)C++庫(kù)的一部分。像STL一樣,ATL大膽使用C++模板。模板是C++中眾多具有爭(zhēng)議的特性之一。每每使用不當(dāng)都會(huì)導(dǎo)致執(zhí)行混亂,降低性能 和難以理解的代碼。明智地使用模板所產(chǎn)生的通用性效果和類型安全特性則是其它方法所望塵莫及的。ATL與STL一樣陷入了兩個(gè)極端。幸運(yùn)的是 在L大膽使用C++模板的同時(shí),編譯器和鏈接器技術(shù)也在以同樣的步伐向前發(fā)展。為當(dāng)前和將來(lái)的開發(fā)進(jìn)行STL和ATL的合理選擇。
            ??? 盡管模板在內(nèi)部得到廣泛的使用,但是在用ATL技術(shù)時(shí),你不用去敲入或關(guān)心那些模板中的尖括弧。因?yàn)锳TL本身帶有ATL對(duì)象向?qū)В▍⒁妶D一):






            圖一 ATL 對(duì)象向?qū)?br />

            ??? 對(duì)象向?qū)Мa(chǎn)生大量基于ATL模板類缺省的對(duì)象實(shí)現(xiàn)代碼(即框架代碼)。這些缺省的對(duì)象類型如附表一所列。ATL對(duì)象向?qū)г试S任何人 快速建立COM對(duì)象并且在分分鐘之內(nèi)讓它運(yùn)行起來(lái),不用去考慮COM或ATL的細(xì)節(jié)問(wèn)題。當(dāng)然,為了能充分駕馭ATL,你必須掌握C++,模板和COM編程技術(shù)。對(duì)于大型的對(duì)象類,只要在ATL對(duì)象向?qū)a(chǎn)生的缺省實(shí)現(xiàn)(框架代碼)中加入方法實(shí)現(xiàn)來(lái)輸出定制接口,這也是大多數(shù)開發(fā)人員開始實(shí)現(xiàn)COM對(duì)象時(shí)的重點(diǎn)所在。
            ??? 初次接觸ATL時(shí),其體系結(jié)構(gòu)給人的感覺(jué)是神秘和不可思議。HelloATL是一個(gè)最簡(jiǎn)單的基于ATL的進(jìn)程內(nèi)服務(wù)器源代碼 以及用SDK(純粹用C++編寫)實(shí)現(xiàn)的同樣一個(gè)進(jìn)程內(nèi)服務(wù)器源代碼。在真正構(gòu)建出一個(gè)COM組件之前,代碼需要經(jīng)過(guò)反反復(fù)復(fù)多次斟酌和修改。對(duì)于想加速開發(fā)COM組件速度的主流組件開發(fā)人員來(lái)說(shuō),ATL體系結(jié)構(gòu)并不是什么大問(wèn)題,因?yàn)閷?duì)象向?qū)Мa(chǎn)生了所需要的全部框架代碼,只 要你加入方法定義即可。對(duì)于認(rèn)真的COM開發(fā)人員和系統(tǒng)編程人員來(lái)說(shuō),ATL提供了一個(gè)用C++建立COM組件的高級(jí)的,可擴(kuò)展的體系結(jié)構(gòu)。一旦你理解和掌握了這個(gè)體系結(jié)構(gòu)并能駕馭對(duì)象向?qū)В憔蜁?huì)看到ATL的表現(xiàn)能力和強(qiáng)大的功能 ,它完全可以和原始的COM編程技術(shù)媲美。
            ??? 另外一個(gè)使用ATL開發(fā)COM組件的理由是Visual C++ 5.0+集成開發(fā)環(huán)境(IDE)對(duì)ATL的高度支持。 微軟在Visual C++ 5.0+中將ATL所要用到的接口定義語(yǔ)言(IDL)集成到了C++編輯器中。(待續(xù))

            posted on 2007-03-12 10:01 jay 閱讀(398) 評(píng)論(0)  編輯 收藏 引用 所屬分類: ATL
            久久久久亚洲av成人网人人软件| 久久久久久久99精品免费观看| 久久天天日天天操综合伊人av| 性高朝久久久久久久久久| 久久久一本精品99久久精品88| 久久伊人五月丁香狠狠色| 77777亚洲午夜久久多喷| 国内精品免费久久影院| 东方aⅴ免费观看久久av| 久久久久久a亚洲欧洲aⅴ| 久久91精品国产91| 久久777国产线看观看精品| 免费精品国产日韩热久久| 成人国内精品久久久久影院| 亚洲美日韩Av中文字幕无码久久久妻妇| 无码精品久久一区二区三区| 亚洲国产精品无码成人片久久| 日韩欧美亚洲综合久久影院d3| 色综合合久久天天给综看| 青青青青久久精品国产| 亚洲精品乱码久久久久久| 伊人久久综合热线大杳蕉下载| 日韩精品久久久肉伦网站| 99久久国产免费福利| 婷婷久久香蕉五月综合加勒比| 久久久91人妻无码精品蜜桃HD| 久久精品国产亚洲AV无码偷窥| 香蕉99久久国产综合精品宅男自 | 精品国产婷婷久久久| 亚洲成色www久久网站夜月 | 青青草原综合久久大伊人| 久久99国产一区二区三区| 婷婷久久综合九色综合98| 婷婷久久久亚洲欧洲日产国码AV| 亚洲精品美女久久久久99小说| 国产精品欧美久久久久天天影视| 久久精品国产久精国产思思| 国产色综合久久无码有码| 久久伊人精品一区二区三区| 久久精品国产欧美日韩99热| 日本精品一区二区久久久|