淺談ATL

淺談ATL(一)

作爲Atl/COM/Activex的小斑竹,很想提高我們板塊的人氣,寫點文章來吸引更多的想學COM的新手。天天都會看到一些新手對參數傳遞如自定義結構類型、數組、接口等參數類型出現的問題。這篇文章主要讓一些懼怕COM的新手知道該掌握什麼基礎知識,讓他們知道用什麼做COM組件最簡單,使他們對ATL有個大概的認識。

什麼是ATL

ATL(活動模板庫,Active Template Library)是專門用來開發COM組件的模板庫,當前最新版本是ATL7.1(隨.net發佈),它修改了前版本ATL3.0(隨Visual C++6.0發佈)一些BUG

學習ATL需要必備什麼的背景知識?

1、  COM基礎。因爲ATL是針對COM的,所以紮實的COM知識可以助你一臂之力。最好看看《COM本質論》。

2、  C++模板知識。

3、  Windows基礎知識,特別是Win32中有關窗口部分的知識。因爲ATL對用戶界面(UI)封裝的很淺,往往創建一個窗體和處理一個消息要比MFC複雜得多。

4、  STL知識。ATLSTL在數據集合管理上有相通之處,如果你有STL做基礎,那麼理解ATL中的集合和枚舉應該是輕鬆自如。

怎麼看ATL?

有一定基礎C++程序員都用過STL,它使我們節省了不少時間它給我們封裝了vectorlistqueue等,還有一些泛型算法。以前我們有些人可能大多數都對它有所懷疑,可到現在他得到了我們的肯定。ATL對應於COM,雖然剛出來時BUG多多,現在atl7.1BUG已經很少了!我們可以放心使用了。有些人肯定看過don box的《com本質論》,看完以後肯定會說原來寫個COM組件這麼麻煩呀!最主要的就是注意引用計數,還有那麼多分不清的GUID。甚至剛學COM的都不知道怎麼創建一個新的GUID,也不瞭解他們都是什麼用處。更別說還要創建個類廠,這東東可能把一批想學COM的嚇跑了,COM這方面的資料也很少,有幾本好書都是講理論知識想看着出做幾個例子簡直就是老虎吃天!如果用ATL創建一個組件或者控件是很簡單的,用嚮導不到一分鐘就可以完成,哈哈!有一本《深入解析ATL》這本書值得你一看。有些人肯定會說MFC也可以快速的創建一個控件,對的,如果你想深入到底層感覺還是多用ATL它會讓你更多的掌握COM的精髓所在。我現在用的是ATL7.1做組件,可以在vb6,vc7下用不用加任何.net庫的支持。

ATL的缺點在哪裏呢?

ATL的缺點在對窗體的支持,它只封裝了一寫最基本的功能,幾乎所有控件都要通過Win32窗口的api來完成。我就吃過苦頭,要創建一個combox那可能要浪費點時間了。不過這樣也能讓你體驗一下直接用api創建快感(靈活性很大)。如果你要做一個組件或者開發包最要不要帶界面除非不得已。不要窗體的好處很多,一個是靈活性大,客戶可根據自己的風格編寫界面(客戶很討厭開發包或者控件那些討厭的對話框和怪異按鈕等)。另一個好處就是,如果你的開發包中都是純的接口(沒有界面的接口),可以很方便在接口之間傳遞自定義結構。我看過很多別人寫的控件(或者COM組件),調用一個接口方法十幾個參數,而且讓客戶要花費很長時間學習它的文檔(因爲它們的參數莫名其妙,eg:Create(BSTR str))。我們做出來控件或者COM開發包目的是給客戶用的,可是我們還要保證它用起來簡單靈活,儘量使客戶已看就能用的地步。我想很多人都願意用自定義結構吧!因爲它可以在客戶端直接定義直接用。不過大家要注意了,傳遞結構的時候不管是[in]還是[out]屬性都要傳遞指針,原因很簡單interface 就可以說是 struct(當然它們時有區別的)。Interface是虛的而struct不是。

先寫到這裏,下篇會講點實際的東西。說的不對的地方請大蝦們提出來,我們共同探討。我的msn: wangweixing2003@hotmail

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章