當前位置:首頁 » 編程軟體 » atl編程

atl編程

發布時間: 2022-07-02 21:42:00

❶ VC的MFC和ATL具體是指什麼嘛

MFC,微軟基礎類(Microsoft Foundation Classes),實際上是微軟提供的,用於在C++環境下編寫應用程序的一個框架和引擎,VC++是WinOS下開發人員使用的專業C++ SDK(SDK,Standard SoftWare Develop Kit,專業軟體開發平台),MFC就是掛在它之上的一個輸助軟體開發包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區別:C++是一種程序設計語言,是一種大家都承認的軟體編制的通用規范,而VC++只是一個編譯器,或者說是一種編譯器+源程序編輯器的IDE,WS,PlatForm,這跟Pascal和Dephi的關系一個道理,Pascal是Dephi的語言基礎,Dephi使用Pascal規范來進行Win下應用程序的開發和編譯,卻不同於Basic語言和VB的關系,Basic語言在VB開發出來被應用的年代已經成了Basic語言的新規范,VB新加的Basic語言要素,如面對對象程序設計的要素,是一種性質上的飛躍,使VB既是一個IDE,又成長成一個新的程序設計語言),MFC同BC++集成的VCL一樣是一個非外掛式的軟體包,類庫,只不過MFC類是微軟為VC++專配的..
MFC是Win API與C++的結合,API,即微軟提供的WinOS下應用程序的編程語言介面,是一種軟體編程的規范,但不是一種程序開發語言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語言來進行對Win OS下應用程序的開發,使這些被開發出來的應用程序能在WinOS下運行,比如VB,VC++,Java,Dehpi編程語言函數本質上全部源於API,因此用它們開發出來的應用程序都能工作在WinOS的消息機制和繪圖里,遵守WinOS作為一個操作系統的內部實現,這其實也是一種必要,微軟如果不提供API,這個世上對Win編程的工作就不會存在,微軟的產品就會迅速從時尚變成垃圾,上面說到MFC是微軟對API函數的專用C++封裝,這種結合一方面讓用戶使用微軟的專業C++ SDK來進行Win下應用程序的開發變得容易,因為MFC是對API的封裝,微軟做了大量的工作,隱藏了好多內節程序開發人員在Win下用C++ & MFC編制軟體時的大量內節,如應用程序實現消息的處理,設備環境繪圖,這種結合是以方便為目的的,必定要付出一定代價(這是微軟的一向作風),因此就造成了MFC對類封裝中的一定程度的的冗餘和迂迴,但這是可以接受的..
最後要明白MFC不只是一個功能單純的界面開發系統,它提供的類絕大部分用來進行界面開發,關聯一個窗口的動作,但它提供的類中有好多類不與一個窗口關聯,即類的作用不是一個界面類,不實現對一個窗口對象的控制(如創建,銷毀),而是一些在WinOS(用MFC編寫的程序絕大部分都在WinOS中運行)中實現內部處理的類,如資料庫的管理類等,學習中最應花費時間的是消息和設備環境,對C++和MFC的學習中最難的部分是指針,C++面向對像程序設計的其它部分,如數據類型,流程式控制制都不難,建議學習數據結構C++版..

一、 什 么 是ATL
---- 1 .COM 的 發 展 及 其 局 限 性

---- 自 從1993 年Microsoft 首 次 公 布 了COM 技 術 以 後,Windows 平 台 上 的 開 發 模 式 發 生 了 巨 大 的 變 化, 以COM 為 基 礎 的 一 系 列 軟 件 組 件 化 技 術 將Windows 編 程 帶 入 了 組 件 化 時 代。 廣 大 開 發 人 員 在 為COM 帶 來 的 軟 件 組 件 化 趨 勢 歡 欣 鼓 舞 的 同 時, 對 於COM 開 發 技 術 的 難 度 和 煩 瑣 的 細 節 也 感 到 極 其 的 不 便。COM 編 程 一 度 被 視 為 一 種 高 不 可 攀 的 技 術, 令 人 望 而 卻 步。 開 發 人 員 希 望 能 夠 有 一 種 方 便 快 捷 的COM 開 發 工 具, 提 高 開 發 效 率, 更 好 地 利 用 這 項 技 術。

---- 針 對 這 種 情 況,Microsoft 公 司 在 推 出COM SDK 以 後, 為 簡 化COM 編 程, 提 高 開 發 效 率, 采 取 了 許 多 方 案, 特 別 是 在MFC(Microsoft Foundation Class) 中 加 入 了 對COM 和OLE 的 支 持。 但 是 隨 著Internet 的 發 展, 分 布 式 的 組 件 技 術 要 求COM 組 件 能 夠 在 網 絡 上 傳 輸, 而 又 盡 量 節 約 寶 貴 的 網 絡 帶 寬 資 源。 采 用MFC 開 發 的COM 組 件 由 於 種 種 限 制 不 能 很 好 地 滿 足 這 種 需 求, 因 此Microsoft 在1995 年 又 推 出 了 一 種 全 新 的COM 開 發 工 具 — —ATL。

---- ATL 是ActiveX Template Library 的 縮 寫, 它 是 一 套C++ 模 板 庫。 使 用ATL 能 夠 快 速 地 開 發 出 高 效、 簡 潔 的 代 碼, 同 時 對COM 組 件 的 開 發 提 供 最 大 限 度 的 代 碼 自 動 生 成 以 及 可 視 化 支 持。 為 了 方 便 使 用, 從Microsoft Visual C++ 5.0 版 本 開 始,Microsoft 把ATL 集 成 到Visual C++ 開 發 環 境 中。1998 年9 月 推 出 的Visual Studio 6.0 集 成 了ATL 3.0 版 本。 目 前,ATL 已 經 成 為Microsoft 標 准 開 發 工 具 中 的 一 個 重 要 成 員, 日 益 受 到C++ 開 發 人 員 的 重 視。

---- ATL 究 竟 給 開 發 人 員 帶 來 了 什 么 樣 的 益 處 呢 ? 這 要 先 從ATL 產 生 以 前 的COM 開 發 方 式 說 起。

---- 在ATL 產 生 以 前, 開 發COM 組 件 的 方 法 主 要 有 兩 種: 一 是 使 用COM SDK 直 接 開 發COM 組 件, 另 一 種 方 式 是 通 過MFC 提 供 的COM 支 持 來 實 現。

---- 直 接 使 用COM SDK 開 發COM 組 件 是 最 基 本 也 是 最 靈 活 的 方 式。 通 過 使 用Microsoft 提 供 的 開 發 包, 我 們 可 以 直 接 編 寫COM 程 序。 但 是, 這 種 開 發 方 式 的 難 度 和 工 作 量 都 很 大, 一 方 面, 要 求 開 發 者 對 於COM 的 技 術 原 理 具 有 比 較 深 入 的 了 解( 雖 然 對 技 術 本 身 的 深 刻 理 解 對 使 用 任 何 一 種 工 具 都 是 非 常 有 益 的, 但 對 於COM 這 樣 一 整 套 復 雜 的 技 術 而 言, 在 短 時 間 內 完 全 掌 握 是 很 難 的); 另 一 方 面, 直 接 使 用COM SDK 要 求 開 發 人 員 自 己 去 實 現COM 應 用 的 每 一 個 細 節, 完 成 大 量 的 重 復 性 工 作。 這 樣 做 的 結 果 是, 不 僅 降 低 了 工 作 效 率, 同 時 也 使 開 發 人 員 不 得 不 把 許 多 精 力 投 入 到 與 應 用 需 求 本 身 無 關 的 技 術 細 節 中。 雖 然 這 種 開 發 方 式 對 於 某 些 特 殊 的 應 用 很 有 必 要, 但 這 種 編 程 方 式 並 不 符 合 組 件 化 程 序 設 計 方 法 所 倡 導 的 可 重 用 性, 因 此, 直 接 采 用COM SDK 不 是 一 種 理 想 的 開 發 方 式。

---- 使 用MFC 提 供 的COM 支 持 開 發COM 應 用 可 以 說 在 使 用COM SDK 基 礎 上 提 高 了 自 動 化 程 度, 縮 短 了 開 發 時 間。MFC 采 用 面 向 對 象 的 方 式 將COM 的 基 本 功 能 封 裝 在 若 干MFC 的C++ 類 中, 開 發 者 通 過 繼 承 這 些 類 得 到COM 支 持 功 能。 為 了 使 派 生 類 方 便 地 獲 得COM 對 象 的 各 種 特 性,MFC 中 有 許 多 預 定 義 宏, 這 些 宏 的 功 能 主 要 是 實 現COM 接 口 的 定 義 和 對 象 的 注 冊 等 通 常 在COM 對 象 中 要 用 到 的 功 能。 開 發 者 可 以 使 用 這 些 宏 來 定 制COM 對 象 的 特 性。

---- 另 外, 在MFC 中 還 提 供 對Automation 和ActiveX Control 的 支 持, 對 於 這 兩 個 方 面,Visual C++ 也 提 供 了 相 應 的AppWizard 和ClassWizard 支 持, 這 種 可 視 化 的 工 具 更 加 方 便 了COM 應 用 的 開 發。

---- MFC 對COM 和OLE 的 支 持 確 實 比 手 工 編 寫COM 程 序 有 了 很 大 的 進 步。 但 是MFC 對COM 的 支 持 還 不 夠 完 善 和 徹 底, 例 如 對COM 接 口 定 義 的IDL 語 言,MFC 並 沒 有 任 何 支 持, 此 外 對 於 近 些 年 來COM 和ActiveX 技 術 的 新 發 展MFC 也 沒 有 提 供 靈 活 的 支 持。 這 是 由MFC 設 計 的 基 本 出 發 點 決 定 的。MFC 被 設 計 成 對Windows 平 台 編 程 開 發 的 面 向 對 象 的 封 裝, 自 然 要 涉 及Windows 編 程 的 方 方 面 面,COM 作 為Windows 平 台 編 程 開 發 的 一 個 部 分 也 得 到MFC 的 支 持, 但 是MFC 對COM 的 支 持 是 以 其 全 局 目 標 為 出 發 點 的, 因 此 對COM 的 支 持 必 然 要 服 從 其 全 局 目 標。 從 這 個 方 面 而 言,MFC 對COM 的 支 持 不 能 很 好 地 滿 足 開 發 者 的 要 求。

---- 隨 著Internet 技 術 的 發 展,Microsoft 將ActiveX 技 術 作 為 其 網 絡 戰 略 的 一 個 重 要 組 成 部 分 大 力 推 廣, 然 而 使 用MFC 開 發 的ActiveX Control, 代 碼 冗 余 量 大, 即 所 謂 的「 肥 代 碼」(Fat Code), 而 且 必 須 要 依 賴 於MFC 的 運 行 時 刻 庫 才 能 正 確 地 運 行。 雖 然MFC 的 運 行 時 刻 庫 只 有 部 分 功 能 與COM 有 關, 但 是 由 於MFC 的 繼 承 實 現 的 本 質,ActiveX Control 必 須 背 負 運 行 時 刻 庫 這 個 沉 重 的 包 袱。 如 果 采 用 靜 態 連 接MFC 運 行 時 刻 庫 的 方 式, 這 將 使ActiveX Control 代 碼 過 於 龐 大, 在 網 絡 上 傳 輸 時 將 占 據 寶 貴 的 網 絡 帶 寬 資 源; 如 果 采 用 動 態 連 接MFC 運 行 時 刻 庫 的 方 式, 這 將 要 求 瀏 覽 器 一 方 必 須 具 備MFC 的 運 行 時 刻 庫 支 持。 總 之,MFC 對COM 技 術 的 支 持 在 網 絡 應 用 的 環 境 下 也 顯 得 很 不 靈 活。

❷ c++中的ATL是用來干什麼的

ATL簡介 一. 什麼是ATL 自從1993年Microsoft首次公布了COM技術以後,Windows平台上的開發模式發生了巨大的變化,以COM為基礎的一系列軟體組件化技術將Windows編程帶入了組件化時代。廣大的開發人員在為COM帶來的軟體組件化趨勢歡欣鼓舞的同時,對於COM開發技術的難度和煩瑣的細節也感到極其的不便。COM編程一度被視為一種高不可攀的技術,令人望而卻步。開發人員希望能夠有一種方便快捷的COM開發工具,提高開發效率,更好地利用這項技術。 針對這種情況,Microsoft公司在推出COM SDK以後,為簡化COM編程,提高開發效率,採取了許多方案,特別是在MFC(Microsoft Foundation Class)中加入了對COM和OLE的支持。但是隨著Internet的發展,分布式的組件技術要求COM組件能夠在網路上傳輸,而又盡量節約寶貴的網路帶寬資源。採用MFC開發的COM組件由於種種限制不能很好地滿足這種需求,因此Microsoft在1995年又推出了一種全新的COM開發工具ATL。 ATL是ActiveX Template Library 的縮寫,它是一套C++模板庫。使用ATL能夠快速地開發出高效、簡潔的代碼(Effective and Slim code),同時對COM組件的開發提供最大限度的代碼自動生成以及可視化支持。為了方便使用,從Microsoft Visual C++5.0版本開始,Microsoft把ATL集成到Visual C++開發環境中。1998年9月推出的Visual Studio 6.0 集成了ATL 3.0版本。目前,ATL已經成為Microsoft標准開發工具中的一個重要成員,日益受到C++開發人員的重視。 ATL究竟給開發人員帶來了什麼樣的益處呢?這還要先從ATL產生以前的COM開發方式說起。 在ATL產生以前,開發COM組件的方法主要有兩種:一是使用COM SDK直接開發COM組件,另一種方式是通過MFC提供的COM支持來實現。 直接使用COM SDK開發COM組件是最基本也是最靈活的方式。通過使用Microsoft提供的開發包,我們可以直接編寫COM程序。但是,這種開發方式的難度和工作量都很大,一方面,要求開發者對於COM的技術原理具有比較深入的了解(雖然對技術本身的深刻理解對使用任何一種工具都是非常有益的,但對於COM這樣一整套復雜的技術而言,在短時間內完全掌握是很難的),另一方面,直接使用COM SDK要求開發人員自己去實現COM應用的每一個細節,完成大量的重復性工作。這樣做的結果是,不僅降低了工作效率,同時也使開發人員不得不把許多精力投入到與應用需求本身無關的技術細節中。雖然這種開發方式對於某些特殊的應用很有必要,但這種編程方式並不符合組件化程序設計方法所倡導的可重用性,因此,直接採用COM SDK不是一種理想的開發方式。 使用MFC提供的COM支持開發COM應用可以說在使用COM SDK基礎上提高了自動化程度,縮短了開發時間。MFC採用面向對象的方式將COM的基本功能封裝在若干MFC的C++類中,開發者通過繼承這些類得到COM支持功能。為了使派生類方便地獲得COM對象的各種特性,MFC中有許多預定義宏,這些宏的功能主要是實現COM介面的定義和對象的注冊等通常在COM對象中要用到的功能。開發者可以使用這些宏來定製COM對象的特性。 另外,在MFC中還提供對Automation 和 ActiveX Control的支持,對於這兩個方面,Visual C++也提供了相應的AppWizard和ClassWizard支持,這種可視化的工具更加方便了COM應用的開發。 MFC對COM和OLE 的支持確實比手工編寫COM程序有了很大的進步。但是MFC對COM的支持是不夠完善和徹底的,例如對COM介面定義的IDL語言,MFC並沒有任何支持,此外對於近些年來COM和ActiveX技術的新發展MFC也沒有提供靈活的支持。這是由MFC設計的基本出發點決定的。MFC被設計成對Windows平台編程開發的面向對象的封裝,自然要涉及Windows編程的方方面面,COM作為Windows平台編程開發的一個部分也得到MFC的支持,但是MFC對COM的支持是以其全局目標為出發點的,因此對COM 的支持必然要服從其全局目標。從這個方面而言,MFC對COM的支持不能很好的滿足開發者的要求。

❸ atl是什麼意思

ATL,Active Template Library活動模板庫,是一種微軟程序庫,支持利用C++語言編寫ASP代碼以及其它ActiveX程序。通過活動模板庫,可以建立COM組件.用於windows shell <extension> 編程。

❹ c++中ATL,VCL,BCB指的是什麼

ATL,Active TEmplate Library活動模板庫
VCL是Visual Component Library的縮寫,即可視組件庫,它是Borland 公司出品的Delphi,C++Builder等編程語言的基本類庫。
BCB就是Borland C++ Builder。

❺ ATL的ATL基本使用

這一部分將重點介紹ATL的基本使用過程。由於ATL已經被集成在Microsoft Visulal Studio的Visual C++開發環境中,因此要使用ATL必須先安裝Visual C++。在下面的討論中有關COM的基本知識請參閱有關的文檔,這里不再詳細說明。
使用ATL開發一個COM應用基本可以分為以下幾個步驟:
創建一個新的ATL工程,並對工程的選項進行適當的配置。
向新創建的工程添加新的ATL類,並對該類進行一些初始配置工作。
根據COM應用的基本要求向新的ATL類加入新的介面定義,並實現相應的介面成員函數。
編譯連接工程,注冊COM應用。
下面將根據這些步驟依次介紹ATL的基本使用過程(給出的是Visual Studio 6.0的使用):
1. 創建工程
首先啟動Visual C++集成開發環境,選擇「File」菜單下的「New...」命令,在「New」對話框中選擇「Project」頁。
選擇「ATL COM AppWizard」項,這是創建ATL工程的AppWizard向導入口。然後在「Project name」編輯框中輸入工程的名字,單擊「OK」按鈕,進入AppWizard對話框。
在AppWizard對話框中主要的設置選項有:
COM服務程序的類型:
-動態連接庫(Dynamic Linking Library) 最終產生一個動態連接庫(DLL)形式的COM服務程序;
-應用程序(Executable application)最終產生一個可執行程序類型(EXE)的COM服務程序;
- NT服務(NT Service):產生一個以NT服務方式運行的COM服務程序。
允許嵌入Proxy/Stub代碼。由Microsoft提供的MIDL編譯IDL文件以後,將產生用於對象調度(Marshaling)的Proxy/Stub的代碼。傳統地,這部分代碼與COM服務程序的代碼是分離的,但是由於新的COM標准支持多線程環境下的COM對象服務,因此在動態連接庫的COM服務程序中也要有Proxy/Stub的支持。為了支持在網路上的傳輸,ATL允許用戶選擇將Proxy/Stub的代碼包括在生成的DLL代碼中。這個選項在EXE和NT服務類型的COM應用條件下不可選。
允許支持MFC。由於ATL對除COM以外的基本的Windows編程方面的支持極為有限,同時許多程序員對MFC又非常熟悉,因此在ATL的工程設置中允許在ATL工程內部支持使用MFC,即可以使用MFC定義的類。這在一方面來看是非常方便的,特別是對於習慣於使用MFC的開發人員來說,能夠使用MFC提供的各種功能強大的類的支持,而不必直接使用Windows SDK。從另一個方面來看,在ATL工程中使用MFC同時就喪失了ATL代碼輕量級的特點。
支持MTS。MTS是Microsoft Transaction Server的縮寫,它是Microsoft在COM技術方面的一個新的分支,這里不作詳細說明。
完成上面的設置以後,可以選擇FINISH完成工程的設置,ATL將創建相應的工程。
2. 加入ATL類
完成工程的創建和設置以後,下一步就是向工程中加入一個新的ATL類。Visual Studio集成環境提供了向導工具「ATL Object Wizard」用於加入一個新的ATL類。操作過程並不復雜,只是一組對話框操作而已。
首先通過集成環境的「Insert」菜單下的「New ATL Object…」命令進入「ATL Object Wizard」對話框。
這個對話框即為創建ATL對象的向導起始界面。對話框的左邊部分說明了待創建對象的基本類型,這里主要有以下的幾種類型:
對象(Object)基本的COM對象類型;
控制(Control)ActiveX Control類型的ATL對象;
其他(Miscellaneous)輔助功能,如對話框的生成等;
數據訪問(Data Access)數據訪問,支持MTS等。
右邊部分說明了每種類型的詳細內容,對於一般的COM服務程序,使用對象表中的簡單對象(Simple Object)就可以了。
選定待創建對象的基本類型以後,單擊「Next>;」按鈕進入下一步,進入對象屬性設置對話框,如圖4和圖5所示。
對象屬性設置分為兩個過程:先是對象名字標識的設定,然後是對對象的基本屬性進行設置。首先是對象的名字標識設置。
在對象標識編輯框中輸入待創建對象的名字,ATL對象向導將同步地根據用戶輸入的對象標識設定該對象的C++標識和COM標識。對象的C++標識包括對象的類名,cpp文件名和頭文件名。COM標識包括對象在類型庫中的CoClass段和實現的主介面的名字,同時還有在系統注冊表中的類型名以及ProgID。
對象名字標識設置完成以後,選擇對象屬性頁(Attribute)進入對象的屬性設置頁面。
對象的屬性設置是ATL對象創建過程中最復雜的部分,包括以下幾個主要部分:
對象的線程模型(Thread Model)
對象的線程模型是COM對象在多線程環境下被訪問時對訪問方式的控制,預設情況下在ATL中採用的是套間模型Apartment,由系統通過消息隊列方式提供並發控制。
對象的介面模型(Interface)
COM對象的介面可以是雙介面(Dual Interface)。雙介面不同於普通介面(Custom Interface) 之處在於雙介面是從Automation基本介面IDispatch繼承的,而普通介面是從IUnknown介面直接繼承來的。預設的介面模型是雙介面。
對象的聚合模型(Aggregate)
COM規范不允許對象的實現繼承,但是可以通過聚合方式重用其它的COM對象。ATL對象屬性設置中的聚合模型可以指定待創建的COM對象是否支持聚合模型。預設的選項是支持對象的聚合。
對象對錯誤處理的支持(Support ISupportErrorInfo)
選取這個選項可以在對象的運行過程中支持錯誤處理。預設情況下這個選項不被選中。
對象對連接點的支持(Support Connection Points)
連接點是COM對象的事件機制。選中這個選項可以使待創建的COM對象具有發出事件的能力。預設情況下該選項不被選中。
對象對自由線程調度的支持(Free Thread Marshaller,簡稱FTM)
對象的自由線程調度是對象在處於自由線程模型狀態下,為了簡化對象的訪問過程而採用的一種優化策略。預設情況下該選項不被選中。
對於上述的任何一個選項的詳細描述都涉及到COM技術一些核心的內容,並且都已超出本文的范圍,因此本文只對ATL給出的預設選項加以說明,對這些內容感興趣的讀者可以參考Microsoft提供的文檔。
完成了上面的設置以後,就可以按「OK」按鈕完成對象的創建過程。下一步就是向所生成的ATL類的介面中加入成員函數的定義,以及介面成員函數的實現過程。
3. 加入介面定義,實現介面函數
加入了ATL類定義之後,我們可以打開Visual C++集成環境下項目管理器(Workspace)中的Class View來檢查生成的類定義的情況。我們可以看到一個新的類已經生成,同時,還生成了相應的介面定義。ATL Object Wizard為我們生成了類定義的.h 和.cpp文件,此外還有用於介面定義的IDL文件。有了這些文件以後,我們就可以為介面加入成員函數,完成類的定義。
首先在Class View中選中相應的介面,顯示為介面IATLTest,單擊滑鼠右鍵打開菜單,如圖7。此彈出式菜單定義了為介面加入屬性和方法的操作。選取其中的「Add Method...」項,可以為介面加入方法成員;選取「Add Property...」則可以為介面加入新的屬性成員。
加入屬性和方法的對話框可以參看圖8和圖9。如果我們要在介面中加入一個方法,則選取「Add Method...」菜單命令。假設方法名為ABC,方法的返回類型為COM規定的HRESULT類型。我們也可以定義非HRESULT返回類型的函數,但是這需要手工修改介面定義的IDL文件。我們定義ABC方法的一個參數為a,類型為整數型。完成了方法的定義以後,單擊「OK」按鈕則把此方法加入到介面中。
屬性的加入過程是類似的。屬性加入對話框要求指定屬性的類型、名字以及屬性的訪問方式。在屬性和方法的編輯對話框中都有一個「Attributes」按鈕,在給出了一個屬性或方法的基本定義之後,單擊此按鈕,可以對屬性和方法的一些高級特性進行設置。
方法成員加入以後,我們可以通過Class View來檢查ATL為我們所做的工作。首先我們看到ATL在介面的定義中加入了該方法的定義;同時在對應的ATL類定義中,也加入了一個相應的方法的定義;在類對應的.cpp文件中,加入了此方法的實現框架。此後,我們只要在這個函數框架中加入該方法的代碼邏輯,一個介面函數的定義和實現就基本完成了。依照這種方式,我們可以完成整個COM對象的定義和實現。
完成以上的步驟之後,我們就可以編譯連接應用了。
4. 編譯連接應用、注冊COM服務程序
對ATL工程的編譯連接過程包括下面的幾個步驟:
使用MIDL編譯工程的IDL文件,形成介面定義的頭文件和用於調度(Marshalling)的代碼;
編譯工程的.cpp文件形成目標文件;
連接目標文件,形成應用模塊;
注冊COM服務程序。
關於工程編譯連接的其它部分同Visual C++中MFC工程的編譯連接過程相似,這里只重點介紹一下COM服務程序的注冊過程。
在ATL中,COM服務程序的注冊是在工程編譯連接的最後階段,由ATL輔助完成的。在手工的COM編程中,服務程序的注冊是比較麻煩的工作。在ATL中,系統通過讀取在建立工程過程中形成的注冊腳本文件來完成注冊工作。注冊腳本(Register Script 簡稱RGS)是ATL提供的文本方式的注冊輔助文件。下面是注冊腳本文件的一個實例。
HKCR - 表示注冊表中COM對象的注冊項,是HKEY_CLASS_ROOT的縮寫
{
AuthTest.ActiveXObject.1 = s 'ActiveXObject Class'
{
CLSID = s ''
} - 對象的ProgID
AuthTest.ActiveXObject = s 'ActiveXObject Class'
{
CLSID = s ''
} -對象的與版本無關的ProgID
NoRemove CLSID -對象CLSID注冊項
{
ForceRemove = s 'ActiveXObject Class'
{
ProgID = s 'AuthTest.ActiveXObject.1'
VersionIndependentProgID = s 'AuthTest.ActiveXObject'
InprocServer32 = s '%MODULE% -伺服器類型,表示DLL伺服器
{
val ThreadingModel = s 'both' -線程模型,這里是BOTH型
}
}
}
}
RGS文件包含注冊COM服務程序的各項內容,通常我們不必修改此RGS文件,必要時我們也可以手工修改RGS文件來定製模塊的注冊過程。

❻ VC++中ATL\CLR\MFC\Win32區別是什麼

atl 是活動模板庫,常用來開發 activex 組件或者系統服務等;
clr 是託管編程;
mfc 是基於 mfc 框架編程,通常用來做比較復雜的窗口程序;
Win32 是基於 Win32 API 編程,通常用來做短小精悍的程序。

❼ C++里STL和ATL是什麼

STL和ATL都是C++模板庫。
STL = Standard Template Library,標准模板庫,惠普實驗室開發的一系列軟體的統稱。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普實驗室工作時所開發出來的。從根本上說,STL是一些「容器」的集合,這些「容器」有list,vector,set,map等,STL也是演算法和其他一些組件的集合。這里的「容器」和演算法的集合指的是世界上很多聰明人很多年的傑作。STL的目的是標准化組件,這樣就不用重新開發,可以使用現成的組件。STL現在是C++的一部分,因此不用額外安裝什麼。
STL可分為容器(containers)、迭代器(iterators)、空間配置器(allocator)、配接器(adapters)、演算法(algorithms)、仿函數(functors)六個部分。
ATL,Active Template Library活動模板庫,是一種微軟程序庫,支持利用C++語言編寫ASP代碼以及其它ActiveX程序。通過活動模板庫,可以建立COM組件,然後通過ASP頁面中的腳本對COM對象進行調用。這種COM組件可以包含屬性頁、對話框等控制項。

❽ ATL和MFC創建ActiveX控制項的區別

ATL和MFC創建ActiveX控制項的區別

在visual C++
6.0中,ATL和MFC代表了兩種不同的框架,分別面向不同類型的基於Windows的開發。ATL提供了一種框架來實現創建COM客戶機和伺服器所必
須的樣板文件代碼;MFC代表了創建獨立的Windows應用的一種簡單、一致的方法。這兩種框架都可以用來創建ActiveX控制項。

ActiveX控制項的完全形態
ActiveX控制項基於構件對象模型COM,使得ActiveX控制項成為可能的COM的基本原則是一個對象的介面和其實現能夠而且應該分開對待。只要
COM的對象和它的客戶方代碼就介面細節達成了一致,如何實現就不成其問題。ActiveX控制項展示了大量
ActiveX控制項包容器理解的介面。因為客戶方代碼和控制項認可這些介面的外在表現,你可以編寫一個ActiveX控制項然後簡單的將它放入包容器中。包容
器將通過良好定義的介面來驅動控制項,而這些控制項將以自己的方式做出合適的響應。在更高的層次上,一個ActiveX控制項是實現了幾個主要ActiveX技
術的一個COM對象,包括通常的引入COM介面,OLE嵌入協議,連接點和屬性頁。在較低的編程層次上,ActiveX控制項只是實現了某些類型介面的
COM類。當一些客戶方代碼成功的查詢到這些介面之一時,它就知道如何使用一個ActiveX控制項了。

一個ActiveX控制項暴露的介面主要分為3類。第一,ActiveX控制項是可嵌入的對象;就是說,它們實現了大多數的OLE文檔、in-place激活和嵌入協議。ActiveX控制項實現了如下的介面:

IOleObject, IPersistStorage, IDataObject, IOleInPlaceActiveObject,
IOleInPlaceObject, IViewObject2和IRunnableObject (這一個很少用到).
第二ActiveX控制項通常都支持屬性頁,這樣客戶方就可以修改控制項的屬性了。最後,ActiveX控制項通常都利用COM的連接點技術,實現了客戶方能發
現的外出介面。

為了幫助比較ATL和MFC框架,我們來看一下寫在每一種框架中的相同的控制項。此控制項監視創建它的線程上傳遞的消息流。消息流控制項是一個很不錯的例子,因
為它演示了一個ActiveX控制項所有主要的方面,包括送入介面、外出介面,屬性,永久性以及屬性頁。讓我們從研究這兩個框架提供的標準的COM支持開始
吧。

MFC的基本COM支持
Microsoft建立MFC使得開發Windows®應用程序比使用SDK容易多了。有了MFC,Microsoft接著增加了對即存框架的COM支
持。這意味著MFC的開發者在增加越來越多的函數時必須保持框架的完整。同時,Visual
C++®編譯器那時還不支持模板,因此,它們不得不藉助非模板的其它手段來將COM功能摻入它們的類中。Microsoft通過加入一些虛函數到
CcmdTarget類和一些宏中解決了這個問題,使得在MFC中實現COM介面有了可能。

MFC內部的COM支持從CcmdTarget開始,CcmdTarget類實現了Iunknown介面,還包括了一個用於引用計數的成員變數
(m_dwRef)以及用於實現IUnknown 的6個函數:: InternalAddRef, InternalRelease,
InternalQueryInterface, ExternalAddRef, ExternalRelease, 和
ExternalQueryInterface.。QueryInterface的兩個版本——AddRef和Release支持COM聚合。
InternalAddRef,

InternalRelease和InternalQueryInterface完成引用計數和QueryInterface操作,而
ExternalAddRef, ExternalRelease和
ExternalQueryInterface代理控制聚合的對象(如果此對象參與聚合的話)。

MFC使用嵌套的類復合策略來實現COM介面。在MFC中,想實現COM
介面的類是從CcmdTarget中派生的。每個由CcmdTarget派生出的類實現的介面得到它自己的嵌套類。MFC使用宏
BEGIN_INTERFACE_PART和END_INTERFACE_PART來產生嵌套類。

最後,MFC實現了表驅動的QueryInterface。MFC的介面映射的工作機理同它的消息映射基本相同:
MFC的消息映射把一個Windows消息和一個C++類中的函數相聯系;MFC的介面映射把一個介面的GUID和一個表示此介面的特定的vptr的地址
相聯系。每個基於CcmdTarget的類實現COM介面通過更多的宏:DECLARE_INTERFACE_MAP,
BEGIN_INTERFACE_MAP, INTERFACE_PART,和 END_INTERFACE_MAP來增加一個介面映射。

為了理解這些宏在實際中是什麼樣子的,請看圖1,它說明了實現ActiveX控制項,COleControl
的MFC類。當你細讀代碼時,注意ColeControl帶有夾在一對BEGIN_INTERFACE_PART 和
END_INTERFACE_PART宏之間的每個介面的簽名,還要注意ColeControl的介面映射表有22個條目。

除了實現了Iunknown介面,MFC還包括IclassFactory的一個標准實現。再一次,MFC通過若干宏提供了此支持。MFC有兩個宏來提供
類對象:DECLARE_OLECREATE_EX 和
IMPLEMENT_OLECREATE_EX.。在一個基於CcmdTarget的類中使用這些宏增加一個ColeObjectFactory類型的靜
態成員到該類中。如果你看一下AFXDISP.H中 ColeObjectFactory的定義,你將會看到用在COleObjectFactory
中的MFC的嵌套類宏為實現IClassFactory2定義了一個嵌套類。IClassFactory::CreateInstance的MFC版本使
用MFC的動態創建機制(DECLARE_DYNCREATE
和 IMPLEMENT_DYNCREATE宏打開此功能)來實例化COM類,因此買入MFC的COM支持同樣意味著買入它的動態創建機制。

最後幾個由MFC提供的在ActiveX控制項內的基本COM支持是對Idispatch的支持。用Visual C++ 和
MFC實現一個分發介面幾乎是微不足道的。在MFC中實現一個分發介面,只需要使用ClassWizard就可以了。ClassWizard中的自動創建
板有一個按鈕用於添加屬性,另一個用於添加方法。在MFC中,Idispatch支持來自CcmdTarget類。IDispatch
的MFC的實際實現在一個叫做COleDispatchImpl
的類中,ColeDispatchImpl派生自Idispatch,實現了所有4個Idispatch函數:GetTypeInfoCount,
GetTypeInfo, GetIDsOfNames, 和
Invoke.。由CcmdTarget派生的類通過調用EnableAutomation,將IDispatch
vptr加入到它們的介面映射中。當客戶在基於MFC的ActiveX控制項上調用IDispatch
的QueryInterface時,CcmdTarget交出鏈接在ColeDispatchImpl上的vptr。

每次你使用ClassWizard將一個自動屬性或者方法加入到一個類中時,你同時也在該類的分發映射表中加入了一項。一個分發映射表是一個將
DISPIDs(用來調用分發成員的符號)和它們的供人讀的名字以及和實際完成這個工作的某些C++代碼聯系起來的簡單的表格。
ColeDispatchImpl的調用以及GetIDsOfNames函數通過在類的分發映射表中查找分發成員並分發DISPID相對應的函數來工作。
MFC能為某些基於COM的高級技術如OLE文檔、OLE拖放和自動操作提供非常好的支持,然而,如果你想更改框架——比如說,你想將分發介面編程雙介面
的——你就得大動手腳了。另一方面,ATL更加是COM中心的。

ATL的基本的COM支持
ATL的目標是使開發者不必重寫IUnknown, IDispatch,
IclassFactory和其它的分支以將常規的DLL和EXE變成基於COM的DLL和EXE。從這個角度講,ATL是一個比MFC精簡的多的框架,
它設計和生成時就考慮了COM支持。它使用基於模板的方法,通過繼承ATL提供的模板,開發者可以加入各種COM功能片斷。

ATL的原始COM支持是從對Iunknown的支持開始的。ATL的Iunknown實現分成兩個部分:CcomObjectRootEx類,用來處理Iunknown部分的引用計數;CcomObjectRootBase類,用來處理QueryInterface。

CcomObjectRootEx是一個基於模板的類,將線性模型作為其唯一參數。這是一個真正有趣的說明ATL怎樣使用模板將演算法作為模板參數傳遞的例
子。ATL有兩個處理引用計數的類,用於處理不同的線性模型: CComSingleThreadModel 和
CcomMultiThreadModel。這些類每個都有一個遞增和一個遞減函數。它們之間的區別是CcomSingleThreadModel用標准
C++操作符(++和——)實現遞增和遞減;而CcomMultiThreadModel使用線程安全的InterlockedIncrement

InterlockedDecrement函數來實現這兩個功能。根據用來實例化CcomObjectRootEx的模板參數,它能正確的運行給定的組件
類型。你很快將會看到它的用法的一個例子。象MFC,ATL使用基於表的查找機制實現QueryInterface.。
CComObjectRootBase 通過一個介面映射處理類的QueryInterface函數。BEGIN_ COM_MAP 和
END_COM_MAP
宏定義了一個介面映射的開始和結束。然而,不像MFC,ATL提供了17種途徑來組成一個介面映射,例如使用從ATL的基於模板的介面實現類如
IOleObjectImpl 來的vptrs。這包括了那些從tear-off 的類或者由聚合提供的類來的vptrs。

在ATL里,C++類通過繼承CcomObjectRootEx,指定它們想用的組件模型(記住,MFC的Iunknown支持是內建在CcmdTarget中的)變成了COM類。

ATL的類對象(以及IClassFactory)支持也來自模板,而MFC的類對象支持通過
ColeObjectFactory和一些宏而有效。ATL的類對象支持來自CComCoClass/CcomClassFactory類家族和
CcomCreator類家族。CcomCoClass包含了類的GUID,定義了COM類的錯誤處理設施。CcomCreator類提供了
CreateInstance的實現,供CcomClassFactory使用。對於MFC,你可以通過若干宏,使所有這種支持有效。ATL包括
DECLARE_CLASS_FACTORY,
DECLARE_CLASS_ FACTORY2, DECLARE_CLASS_FACTORY_AUTO_THREAD, 以及
DECLARE_CLASS_FACTORY_SINGLETON等宏用來使各種具體的類工廠支持有效。

最後,ATL
對IDispatch的支持還來自模板類,——其名字是IDispatchImpl.。比起MFC的Idispatch支持來,ATL對
Idispatch的支持更加是COM中心的。MFC使用了一種hand-rolled
的IDispatch實現,而ATL使用更加標準的方法來載入一個介面的類型信息並代表標準的類型庫編譯器。

圖2顯示了一個標準的基於ATL的控制項。最值得注意的一點是MFC和ATL各是怎樣引入實現一個控制項所需的必要的各種介面的。MFC對標准控制項介面的支持
是內建在ColeControl類中的。你從ColeControl中派生出你的控制項並且一次性繼承所有的函數調用。注意ATL通過模板繼承以零碎的方式
逐個引入每個功能片斷。這是一個非常重要的差異,因為這意味著用ATL你可以忽略一些介面實現模板(例如,使你的控制項更為精簡)剝掉不希望的功能。對
MFC,你不能完成同樣的動作——不管你想不想,你將獲得所有介面。

關於例子應用
這里我將使用的例子是一個通過一個分支過程監控消息流的ActiveX控制項,它實時的顯示消息流圖。這兩個控制項實際上有著相同的功能。它們都把圖表提交到
屏幕。它們都帶流入介面以便包容器能通知控制項開始和停止該圖表。它們都支持圖表線的顏色和消息間隔長度作為屬性而可以永久存在。最後,它們都支持預設事件
集,將關於在一個特定時間段里處理的消息的數量通知包容器。圖3顯示了這兩個控制項。

可以看一下:

熱點內容
斐波那契數列的遞歸演算法 發布:2024-05-04 14:34:55 瀏覽:968
數字支付密碼哪裡找 發布:2024-05-04 14:26:50 瀏覽:86
天翼雲免費存儲 發布:2024-05-04 14:22:55 瀏覽:782
微信56g緩存怎麼解決 發布:2024-05-04 14:09:41 瀏覽:706
sqlupdatewhereand 發布:2024-05-04 13:55:47 瀏覽:586
java視頻教程推薦 發布:2024-05-04 13:55:08 瀏覽:86
安卓官服閃耀暖暖怎麼換 發布:2024-05-04 13:46:37 瀏覽:171
我的世界精靈伺服器怎麼抓寵物 發布:2024-05-04 13:28:54 瀏覽:960
編譯androidwebkit 發布:2024-05-04 13:11:37 瀏覽:761
安卓微信流量怎麼控制 發布:2024-05-04 12:47:19 瀏覽:799