• <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  評論-20  文章-55  trackbacks-0

            本文假設你熟悉C++和COM。

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

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






            圖一 ATL 對象向導


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

            posted on 2007-03-12 10:01 jay 閱讀(405) 評論(0)  編輯 收藏 引用 所屬分類: ATL
            久久天堂AV综合合色蜜桃网| 亚洲午夜久久久影院| 久久精品国产99国产精偷| 久久香蕉综合色一综合色88| 国产精品免费久久| 尹人香蕉久久99天天拍| av无码久久久久不卡免费网站 | 欧美一区二区三区久久综| 久久福利青草精品资源站| 日韩欧美亚洲综合久久影院d3| 久久天天躁狠狠躁夜夜2020老熟妇| 一本一本久久a久久精品综合麻豆| 精品多毛少妇人妻AV免费久久 | 亚洲精品乱码久久久久66| 久久精品www| 无码精品久久久久久人妻中字| 国产AV影片久久久久久| 国产69精品久久久久久人妻精品| 伊人热人久久中文字幕| 久久精品国产亚洲AV无码麻豆| 精品无码久久久久久国产| www性久久久com| 久久久久青草线蕉综合超碰| 精品久久国产一区二区三区香蕉 | 久久精品国产99国产精品亚洲| 国产99久久久国产精免费| 久久久久成人精品无码中文字幕 | 中文成人久久久久影院免费观看| 中文字幕亚洲综合久久| 99精品久久精品一区二区| 三级三级久久三级久久| 久久国产视频网| 国产一区二区三精品久久久无广告| 亚洲AV日韩精品久久久久久| 国产香蕉久久精品综合网| 国产精品中文久久久久久久| 99久久这里只精品国产免费| 无码乱码观看精品久久| 色综合久久中文字幕综合网| 色播久久人人爽人人爽人人片aV | 久久久精品波多野结衣|