ATL学习笔记〔一〕
ATL 即活動(dòng)模板庫(kù),是一套基于模板的 C++ 類,使用這些類可以容易地創(chuàng)建小型、快速的組件對(duì)象模型 (COM) 對(duì)象。它具有對(duì)主要 COM
功能的特殊支持,包括:IUnknown、IClassFactory、IClassFactory2 和 IDispatch 的常用實(shí)現(xiàn);雙重接口;標(biāo)準(zhǔn) COM 枚舉數(shù)接口;連
接點(diǎn);分開(kāi)的接口;ActiveX 控件。
[[
看來(lái),ATL是用C++開(kāi)發(fā)COM的一個(gè)很好的選擇!
]]
ATL 代碼可以用來(lái)創(chuàng)建單線程對(duì)象、單元模型對(duì)象、自由線程模型對(duì)象或既是自由線程又是單元模型的對(duì)象。
模板有一些像宏。與使用宏一樣,調(diào)用模板將使它展開(kāi)(伴隨適當(dāng)?shù)膮?shù)替換)為已經(jīng)編寫的代碼。但是,模板比這更進(jìn)一步,它允許基于
作為參數(shù)傳遞的類型創(chuàng)建新類。這些新類能夠?qū)崿F(xiàn)以類型安全的方法執(zhí)行在模板代碼中表示的操作。
模板庫(kù)(如 ATL)與傳統(tǒng)的 C++ 類庫(kù)的區(qū)別在于:它們通常只作為源代碼(或作為具有少量的提供支持的運(yùn)行時(shí)的源代碼)提供,并且在
本質(zhì)上沒(méi)有固有的分層結(jié)構(gòu)或沒(méi)有必要有分層結(jié)構(gòu)。不是從類中派生以得到所需的功能,而是從模板中實(shí)例化類。
ATL 使您可以很容易創(chuàng)建 COM 對(duì)象、自動(dòng)化服務(wù)器和 ActiveX 控件。ATL 為許多基本的 COM 接口提供內(nèi)置支持。
ATL 作為在應(yīng)用程序中包括的源代碼提供。ATL 還使一個(gè) DLL (atl71.dll) 可用,該 DLL 包含可以在多個(gè)組件之間共享的代碼。但是,該
DLL 并非必要。
[[
看過(guò)一些講COM的書上說(shuō):COM只是一種規(guī)范,而它的表現(xiàn)形式通常是一個(gè)DLL!但是并不絕對(duì)是DLL!
那還有什么形式呢?
]]
使用 ATL
ATL 對(duì)于用 C++ 創(chuàng)建 COM 組件和節(jié)省空間都是一種快速簡(jiǎn)便的方法。如果不需要 MFC 自動(dòng)提供的所有內(nèi)置功能,使用 ATL 創(chuàng)建控件。
使用 MFC
MFC 允許創(chuàng)建具有完整功能的應(yīng)用程序、ActiveX 控件和活動(dòng)文檔。如果已經(jīng)使用 MFC 創(chuàng)建了控件,可能需要繼續(xù)使用 MFC 進(jìn)行開(kāi)發(fā)。
當(dāng)創(chuàng)建新控件時(shí),如果不需要 MFC 的所有內(nèi)置功能,可考慮使用 ATL。
[[
呵呵,看來(lái)ATL比MFC要好不少了!最起碼體積占優(yōu)勢(shì)呀!
不過(guò),到這里可以有一些肯定的問(wèn)題了,ATL:活動(dòng)模板庫(kù)、MFC基本類庫(kù)!都是類庫(kù)!ATL和MFC是平行的!不要搞出笑話!
]]
活動(dòng)模板庫(kù) (ATL) 是一套基于模板的 C++ 類,用以簡(jiǎn)化小而快的 COM 對(duì)象的編寫。
[[
ATL是一套現(xiàn)成的類庫(kù),提供給程序員,目的是編寫COM對(duì)象的!
]]
使用 ATL 項(xiàng)目向?qū)У摹皯?yīng)用程序設(shè)置”頁(yè)為新 ATL 項(xiàng)目設(shè)計(jì)和添加基本功能。
屬性化
默認(rèn)值。創(chuàng)建使用屬性的 ATL 項(xiàng)目。選擇此選項(xiàng)后,module 屬性將插入到項(xiàng)目的 .cpp 文件中。該屬性自動(dòng)實(shí)現(xiàn) DllMain、
DllRegisterServer、DllUnregisterServer、DllGetClassObject 和 DllCanUnloadNow。ATL 項(xiàng)目向?qū)蓛蓚€(gè)項(xiàng)目:支持屬性的框架
ATL DLL 項(xiàng)目(稱為 ProjName)和代理/存根 (stub) 項(xiàng)目(稱為 ProjNamePS)。
屬性化項(xiàng)目不允許 MFC 支持和合并代理/存根 (stub) 代碼。
默認(rèn)情況下,其他將對(duì)象和控件插入項(xiàng)目的 ATL 向?qū)褂脤傩曰a。
服務(wù)器類型
從三種服務(wù)器類型中選擇一種:
動(dòng)態(tài)鏈接庫(kù) (DLL)
選擇以創(chuàng)建進(jìn)程內(nèi)服務(wù)器。
可執(zhí)行文件 (EXE)
選擇以創(chuàng)建本地進(jìn)程外服務(wù)器。此選項(xiàng)不允許 MFC 或 COM+ 1.0 支持。它不允許合并代理/存根 (stub) 代碼。
服務(wù) (EXE)
選擇以創(chuàng)建當(dāng) Windows 啟動(dòng)時(shí)在后臺(tái)運(yùn)行的 Windows 應(yīng)用程序。此選項(xiàng)不允許 MFC 或 COM+ 1.0 支持,也不允許合并代理/存根 (
stub) 代碼。
附加選項(xiàng)
注意?? 所有的附加選項(xiàng)僅適用于 DLL 項(xiàng)目。
允許合并代理/存根(stub)代碼
選擇“允許合并代理/存根(stub)代碼”復(fù)選框是為了需要封送處理接口時(shí)比較方便。此選項(xiàng)在與服務(wù)器相同的 DLL 中放置 MIDL 生成的代理
和存根 (stub) 代碼。
支持 MFC
選擇以指定對(duì)象包含 MFC 支持。此選項(xiàng)將項(xiàng)目鏈接到 MFC 庫(kù),以便可以訪問(wèn)它們包含的任何類和函數(shù)。
支持 COM+ 1.0
選擇修改項(xiàng)目生成設(shè)置以支持 COM+ 1.0 組件。除標(biāo)準(zhǔn)庫(kù)列表以外,向?qū)н€添加了 COM+ 1.0 組件特定庫(kù) comsvcs.lib
另外,當(dāng)啟動(dòng)應(yīng)用程序時(shí) mtxex.dll 在主系統(tǒng)上延遲加載。
支持組件注冊(cè)器?? 如果 ATL 項(xiàng)目包含對(duì) COM+ 1.0 組件的支持,則可以設(shè)置此選項(xiàng)。組件注冊(cè)器使 COM+ 1.0 對(duì)象得以獲取組件列表、注
冊(cè)組件或注銷組件(個(gè)別或同時(shí))。
從MSDN里學(xué)習(xí)
總結(jié)
以上是生活随笔為你收集整理的ATL学习笔记〔一〕的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 部署 Halo 博客系统
- 下一篇: 所谓的Dumb Question