ATL 開發指南

ATL 開發指南

《ATL 開發指南》,電子工業出版社出版,本書是介紹使用ATL進行軟體開發的參考用書。

內容介紹

全書分為十三章:第一章引入了C++模板的概念;第二章詳細介紹了組件對象模型(COM);第三章介紹了活動模板庫(ATL)的概念和使用方法;第四章涉及接口的實現和執行緒之間的參數調度等細節問題;第五章探討了代碼復用的兩種方法――包容和集合;第六章討論了關於自動化的問題;第七章說明了事件和連線點的管理;第八章圍繞ActiveX控制項展開了詳細的論述;第九章介紹了COM中的兩種實體――枚舉器和集合;第十章研究了COM里的執行緒管理;第十一章討論了OLE DB同ATL之間的關係;第十二章介紹了兩種GUI接口――對話框和視窗;最後一章解釋了COM+的一些基本概念。

由於書中的內容非常龐雜,並且涉及到Visual C++開發的一些核心問題,所以本書對讀者有一定的要求。我們希望你在開始閱讀之前,已經了解COM、ActiveX控制項的基本知識,並且具有使用Visual C++開發應用程式的實踐經驗。本書的主要對象是程式設計或開發人員,同時也可以作為大專院校計算機專業師生和計算機愛好者的參考資料。

作品目錄

前言
第一章 使用C++模板開發應用程式
1.1 模板簡介
1.1.1 函式模板
1.1 .2 類模板
1.2 基於模板的堆疊類
1.3 成員函式的實現
1.4 不定類型的模板參數
1.5 基於模板的復用技術
1.6 ATL如何使用模板
1.7 小結
第二章 組件對象模型(COM)簡介
2.1 軟體組件及其屬性
2.1.1 同語言的無關性:二進制的設計標準
2.1.2 版本升級的魯棒性
2.1. 3 位置的透明性
2.1.4 面向對象的特性
2.2 COM模型的原始實現
2.2.1 客戶程式和伺服器程式
2.2.2 OLE和ActiveX
2.2.3 Microsoft Transaction Server(MTS)
2.3 COM的精髓:接口
2.3.1 C++的虛函式表
2.3.2 COM的接口
2.4 對COM接口的訪問
2.5 組件的多接口特性
2.5.1 標準COM接口
2.5.2 HRESULT
2.5.3 IUnknown的實現
2.5.4 組件的生存期
2.5.5 全局特有標識符
2.5.6 標題標識符
2.5.7 註冊表
2.5.8 組件的類別
2.5.9 OLEVIEW
2.5.10 組件的宿主檔案
2.5.11 類工廠
2.6 基於COM的復用技術
2.6.1 包容(Containment)
2.6.2 集合(Aggregation)
2.7 COM的API函式
2.7.1 Colnitialize和CoInitializeEx
2.7.2 CoUninitialize
2.7.3 CoRegisterClassObject
2.7.4 CoGetClassObject
2.7.5 CoCreateInstance
2.7.6 DllCanUnloadNow
2.7.7 DllGetClassObject
2. 8 其他涉及COM的問題
2.8.1 C++里關於COM的宏:STDMETHOD和STDMETHODIMP
2.8.2 COM和Unicode
2.8.3 COM和多態性
2.9 示例:建立一個簡單的COM客戶程式和伺服器程式
2.9.1 第一步:創建Visual C++工程
2.9.2 第H步:創建IMATH.H檔案
2.9.3 第三步:聲明組件和類工廠
2.9.4 第四步:組件類和類工廠類的實現
2.9.5 第五步:創建組件的宿主(SERVER.CPP)
2.9.6 第六步:添加對自註冊和組件類別的支持
2.9.7 第七步:標準入口點的導出
2.9.8 第八步;將檔案插入到工程里並建立該工程
2.9.9 第九步:使用OLEVIEW測試Math組件
2.9.10 第十步:建立一個簡單的COM客戶
2.9.11 第十一步:建立客戶工程
2.9.12 對伺服器程式進行調試
2.9.13 示例中忽略的東西
2.10 小結
第三章 活動模板庫
3.1 ATL的基本特徵
3.2 ATL和MFC
3.3 ATL框架結構概述
3.3.1 ATL的實現
3.3.2 組件的宿主支持
3.3.3 對IUnknown的支持
3.3.4 對類工廠的支持
3.3.5 對COM程式開發的其他方面的支持
3.4 ATL嚮導程式的使用
3.4.1 ATL COM AppWizard
3.4.2 ATL對象嚮導程式
3.4.3 執行緒管理模型
3.4.4 接口
3.4.5 集合
3.4.6 對ISupportErrorInfo的支持
3.4.7 對連線點的支持
3.4.8 自由執行緒調度器
3.5 ObjectWizard里的其他選項
3.6 一個伺服器程式示例
3.6.1 ATL工程的結構
3.6.2 STDAFX.H和STDAFX.CPP
3.6.3 RESOURCE.H和ProjectName.rc
3.6.4 ProjectName.CPP、ProjectName.H和ProjectName.DEF
3.6.5 ProjectName.IDL
3.7 接口定義語言
3.8 ATL工程的建立
3.8.1 ATL的基本宿主支持:CComModule
3.8.2 BEGIN_OBJECT_MAP和OBJECT_ENTRY宏
3.8.3 CComModule
3.8.4 ATL對組件的支持
3.8.5 AddRef和Release所在的位置
3.8.6 CComObject
3.8.7 接口和多重繼承
3.8.8 ATL_NO_VTABLE
3.8.9 ATL的類工廠支持:CComCoClass
3.8.10 自註冊功能與註冊器
3.8.11 ATL和組件的類別
3.9 使用ATL實現Math組件
3.9.1 創建Visual C++工程
3.9.2 ATL COM AppWizard
3.9.3 ATL Object Wizard
3.9.4 Object Wizard里的Names(名稱項)
3.9.5 Object Wizard里的Attributes(屬性項)
3.10 IMath接口的實現
3.11 添加IAdvancedMath及方法
3.11.1 MATH.H檔案的改動
3.11.2 MATH.CPP檔案的改動
3.12 工程的創建
3.12.1 建立另外一個COM客戶程式
3.12.2 測試伺服器
3.13 小結
第四章 接口、接口定義語言和調度
4.1 COM接口類型概述
4.1.1 Vtable接口
4.1.2 IDispatch接口:Dispinterfaces
4.1.3 雙向接口
4.2 組件及其接口的描述
4.2.1 類型信息
4.2.2 調度
4.3 分散式COM
4.4 標準調度
4.4.1 類型庫(通用)調度
4.4.2 自定義調度
4.5 創建Proxy/Stub DLL
4.6 接口定義語言
4.6.1 基本語法和布局
4.6.2 接口的聲明:方法和屬性
4.7 IDL數據類型
4.7.1 數組
4.7.2 字元串
4.7.3 結構
4.7.4 ENUM類型
4.8 ATL及COM數據類型
4.8.1 接口指針
4.8.2 C++智慧型指針
4.8.3 CComPtr
4.8.4 CComQIPtr
4.8.5 BSTR
4.8.6 CComBSTR
4.9 COM的記憶體管理
4.9.1 CoTaskMemAlloc和CoTaskMemFree
4.9.2 IDL和記憶體管理
4.10 COM中的錯誤處理
4.10.1 ISupportErrorInfo
4.10.2 CreateErrorInfo和ICreateErrorInfo
4.10.3 SetErrorInfo和IErrorInfo
4.11 客戶機和GetErrorInfo
4.12 ATL對錯誤處理的支持
4.12.1 CComCoClass::Error
4.12.2 ISupportErrorInfoImpl
4.13 示例:在一個EXE宿主程式中創建Math組件
4.13.1 步驟一:創建Visual C++工程
4.13.2 步驟二:使用ATL Object Wizard
4.13.3 步驟三:添加IMath和IAdvancedMath接口
4.13.4 步驟四:處理被零除的問題
4.13.5 步驟五:添加IMath2接口
4.13.6 步驟六:添加IComponentInfo接口
4.13.7 步驟七:工程的編譯連線
4.13.8 步驟八:編連並註冊Proxy/Stub DLL
4.14 示例:創建COM客戶機程式
4.15 示例:創建Visual Basic客戶機程式
4.15.1 步驟一:創建應用程式窗體
4.15.2 步驟二:為Math組件插入引用
4.15.3 步驟三:添加代碼
4.16 小結
第五章 包容與集合
5.1 二進制復用
5.2 COM包容
5.3 COM集合
5.4 ATL對集合的支持
5.5 創建集合組件
5.5.1 選擇性集合
5.5.2 盲目集合
5.6 ATL對包容的支持
5.6.1 FinalConstruct和FinalRelease
5.7 ATL對集合的支持
5.7.1 可集合組件的實現
5.7.2 DECLARE_AGGREGATABLE宏
5.7.3 DECLARE_NOT_AGGREGATABLE宏
5.7.4 DECLARE_ONLY_AGGREGATABLE宏
5.7.5 DECLARE_POLY_AGGREGATABLE宏
5.8 集合的實現
5.8.1 COM_INTERFACE_ENTRY_AGGREGATE
5.8.2 COM_INTERFACE_ENTRY_AGGREGATE_BLIND
5.8.3 COM_INTERFACE_ENTRY_AUTOAGGREGATE宏和COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND宏
5.8.4 DECLARE_GET_CONTROLLING_UNKNOWN宏
5.9 示例:創建一個簡單的Math組件
5.9.1 步驟一:創建實現IMath接口的簡單Math組件
5.9.2 步驟二:實現IMath接口
5.9.3 步驟三:工程的編譯連線(簡單示例)
5.10 示例:使用集合實現高級Math組件
5.10.1 步驟一:實現IAdancedMath接口
5.10.2 步驟二:與簡單的Math組件集合
5.10.3 步驟三:納入集合的CLSID和IID定義的頭檔案
5.10.4 步驟四:向類中添加IUnknown指針
5.10.5 步驟五:覆蓋FinalConstruct接口
5.10.6 步驟六:將被集合組件的接口添加到接口映射中
5.10.7 步驟七:釋放被集合的組件
5.10.8 步驟八:測試集合組件
5.11 示例:通過包容實現高級Math組件
5.11.1 步驟一:為IMath添加實現代碼
5.11.2 步驟二:測試包容組件
5.12 小結
第六章 自動化
6.1 後綁定
6.2 Dispinterface
6.3 雙向接口
6.4 自動化數據類型
6.4.1 VARIANT數據類型
6.4.2 SafeArray數據類型
6.5 實現一個派發接口
6.5.1 實現IDispatch接口
6.5.2 IDispatch函式
6.6 雙向接口的實現
6.7 訪問基於IDispatch的接口
6.7.1 後綁定(動態綁定)
6.7.2 ID綁定(前綁定)
6.8 前綁定的需求信息
6.9 ATL對自動化的支持
6.9.1 IDispatchImpl
6.9.2 CComTypeInfoHolder
6.9.3 CComVariant
6.10 自動化與接口版本更新
6.10.1 IDispatch的版本更新
6.10.2 雙向接口的版本更新
6.11 示例:使用自動化實現Math組件
6.11.1 步驟一:創建Math組件
6.11.2 步驟二:實現IMath接口
6.11.3 步驟三:設定IDL屬性
6.11.4 步驟四:編連(Build)所生成的工程
6.12 添加第二個IDispatch接口
6.13 實現第三個雙向接口
6.14 創建C++雙向接口客戶機程式
6.15 創建Visual Basic客戶機程式
6.15.1 後綁定
6.15.2 前綁定
6.16 小結
第七章 事件和連線點
7.1接口的回調
7.2 引入和引出接口
7.2.1 Advise方法
7.2.2 Visual Basic中的Implements關鍵字
7.3 回調示例
7.3.1 步驟一:創建Chapter7_Server工程和Math組件
7.3.2 步驟二:實現IMath接口
7.3.3 步驟三:添加Advise方法
7.3.4 步驟四:定義引出接口
7.3.5 步驟五:通知客戶機程式
7.4 Visual Basic客戶機程式
7.4.1 步驟一:引用Chapter7_CallBackServer的類型庫
7.4.2 步驟二:添加CallBack類
7.4.3 步驟三:通知並傳送組件
7.5 可連線對象
7.5.1 IConnectionPointContainer
7.5.2 IConnectionPoint
7.5.3 連線點、自動化和IProvideClassInfo2
7.5.4 IProvideClassInfo2Impl
7.6 ATL與連線點
7.6.1 Implement Connection Point Wizard嚮導程式
7.6.2 連線映射
7.6.3 IConnectionPointImpl
7.6.4 IConnectionPointContainerImpl
7.6.5 AtlAdvise
7.6.6 Visual Basic的WithEvents關鍵字
7.7 使用連線點的一個示例
7.7.1 步驟一:創建Math組件
7.7.2 步驟二:實現IMath接口
7.7.3 步驟三:定義Event接口
7.7.4 步驟四:運行Implement Connection Point Wizard
7.7.5 步驟五:創建一個C++連線點客戶程式
7.7.6 步驟六:編寫Visual Basic連線點客戶機程式
7.8 小結
第八章 ActiveX控制項
8.1 ActiveX控制項和容器
8.1.1 容器模式
8.1.2 控制項和容器接口
8.2 什麼是ActiveX控制項
8.2.1 OLE Controls '94規範
8.2.2 OLE Controls '96規範
8.2.3 控制項和容器設計指南
8.3 ActiveX控制項功能類屬
8.3.1 基本的COM支持
8.3.2 自註冊
8.4 控制項註冊表項
8.4.1 Control
8.4.2 Programmable
8.4.3 Insertable
8.4.4 MiscStatus
8.4.5 Verb
8.4.6 ToolboxBitmap32
8.4.7 TypeLib
8.5 組件類屬
8.6 OLE文檔接口
8.7 自動化支持:IDispatch
8.7.1 標準屬性和固有屬性
8.7.2 Ambient屬性
8.7.3 ATL和Ambient屬性
8.7.4 標準控制項接口
8.8 可連線對象與控制項事件
8.8.1 標準事件
8.8.2 屬性頁
8.9 屬性的持續性
8.9.1 IPersistStream
8.9.2 IPersistStreamInit
8.9.3 IPersistPropertyBag
8.10 ATL對ActiveX控制項的支持
8.10.1 ATL的ActiveX控制項支持檔案
8.10.2 ATL Object Wizard
8.10.3 Names和Attributes選項卡
8.10.4 Miscellaneous選項卡
8.10.5 View Status選項和透明控制項
8.10.6 Misc Status選項
8.10.7 Add Control Based On選項
8.10.8 對話框中的Other選項區
8.10.9 Stock Properties選項卡
8.11 ATL Object Wizard創建的檔案
8.11.1 CComControl
8.11.2 CComControlBase
8.11.3 CWindowImpl
8.11.4 CStockPropImpl
8.12 初始化固有字型屬性
8.13 IOleObjectImpl
8.14 限制控制項的大小
8.15 IViewObjectImpl
8.16 CComControl::OnDraw
8.17 IDataObjectImpl
8.18 IOleInPlaceObjectImpl
8.19 IOleInPlaceActiveObjectImpl
8.20 IOleControlImpl
8.Z1 IPersistStreamInitImpl和IPersistStorageImpl
8.22 屬性映射
8.23 ATL對屬性頁的支持
8.23.1 CDialogImpl類
8.23.2 IpropertyPageImpl類
8.24 創建一個示例控制項
8.24.1 創建控制項的宿主程式
8.24.2 ATL Object Wizard的使用
8.24.3 ATL Object Wizard的Names和Attributes選項卡
8.24.4 ATL Object Wizard的Miscellaneous選項卡
8.24.5 ATL Object Wizard的Stock Properties選項卡
8.25 創建一個基本的控制項
8.25.1 初始化固有屬性
8.25.2 CComControl::OnDraw
8.25.3 實現控制項屬性的持久性:Property Map
8.26 添加固有屬性頁
8.27 添加自定義屬性頁
8.28 向控制項中添加事件
8.29 使用Connection Point Wizard
8.30 小結
第九章 COM的枚舉器和集合
9.1 COM枚舉器
9.1.1 內部枚舉器接口
9.1.2 IEnumString接口
9.2 客戶枚舉器的訪問
9.3 ATL的枚舉器支持
9.4 CComEnum的套用
9.5 建立一個簡單的枚舉器客戶應用程式
9.6 實現一個簡單的枚舉器對象
9.6.1 步驟1:創建ATL伺服器工程
9.6.2 步驟2:實現枚舉器對象
9.6.3 步驟3:訪問這一簡單的枚舉器伺服器
9.7 COM集合技術
9.7.1 集合對象的實現
9.7.2 ATL對集合的支持
9.8 movie集合的實現
9.8.1 步驟1:創建ATL集合伺服器工程
9.8.2 步驟2:實現movie組件
9.8.3 步驟3:修改IDL檔案
9.8.4 步驟4:實現movie的集合組件
9.8.5 步驟5:定義IMovieCollection接口
9.8.6 步驟6:實現IApplication接口
9.8.7 步驟7:創建工程
9.9 創建Visual Basic客戶程式
9.10 創建C++客戶程式
9.11 小結
第十章 COM的執行緒管理
10.1 COM執行緒管理概述
10.1.1 單執行緒單元
10.1.2 多執行緒單元
10.1.3 單元
10.1.4 進程內組件
10.2 單執行緒單元
10.2.1 主STA
10.2.2 STA組件的需求(概要)
10.3 多執行緒單元
10.3.1 MTA組件的需求(概要)
10.3.2 混合模型組件的需求
10.4 自由執行緒管理的調度器
10.5 CoMarshalInterThreadInterfaceInStream
10.6 代碼示例
10.7 ATL和COM的執行緒管理
10.7.1 Single和Apartment選項
10.7.2 CComSingleThreadModel
10.7.3 Free和Both選項
10.7.4 Free-Threaded Marshaler選項
10.7.5 CComObjectRoot
10.8 執行緒管理的示例
10.8.1 步驟1:創建math組件
10.8.2 步驟2:IMath接口的實現
10.8.3 步驟3:定義事件接口
10.8.4 步驟4:實現Advise方法
10.8.5 步驟5:線上程內執行計算
10.8.6 步驟6:工程的創建
10.9 一個C++客戶應用程式
10.10 小結
第十一章 OLE DB和ATL
11.1 Microsoft數據訪問技術的歷史回顧
11.1.1 ODBC
11.1.2 OLEDB
11.2 ATL和OLEDB
11.2.1 ATL OLE DB Provider模板
11.2.2 數據源類
11.2.3 對話類
11.2.4 行集合類
11.2.5 命令類
11.3 ATL OLE DB Consumer模板
11.3.1 通用數據源支持
11.3.2 行集合和綁定支持
11.3.3 表格和命令支持
11.3.4 用戶記錄
11.4 活動數據對象
11.5 示例
11.5.1 通用工程概述
11.5.2 數據源檔案
11.5.3 表格檔案
11.5.4 創建Provider工程
11.5.5 模式信息的提供
11.5.6 數據管理器的建立
11.5.7 通過ADO訪問OLE DB Providers
11.5.8 MFC/ATL Consumer的例子
11 .6 小結
第十二章 對話框和視窗
12.1 ATL的視窗創建類
12.1.1 CWindow
12.1.2 CWindowImpl和訊息映射
12.1.3 CWinTraits
12.1.4 CSimpleDialog
12.1.5 CDialogImpl
12.2 建立一個簡單的Window GUI
12.2.1 步驟1:創建一個簡單的視窗
12.1.2 步驟2:創建模態對話框
12.2.3 步驟3:創建非模態對話框
12.3 小結
第十三章 COM+入門
13.1 Window DNA
13.2 COM+MTS=COM+
13.3 COM+提供的服務
13.4 COM+的目錄(Catalog)
13.5 COM+的裝載均衡服務
13.6 COM+的IMDB服務
13.7 COM+的對象快取服務
13.8 COM+的佇列組件
13.9 COM+事件
13.10 COM+的安全性服務
13.11 Visual C++未來的變化
13.11.1 基於屬性的編程思路
13.11.2 屬性語法
13.11.3 編譯器的變化
13.11.4 接口描述符
13.12 最後一個例子
13.13 邁向COM+環境
13.14 小結
附錄 Visual C++自帶的COM支持
A.1 智慧型指針:_com_ptr_t
A.2 BSTR(_bstr_t)
A.3 Variant(_variant_t)
A.4 COM的錯誤處理(_com_error)
A.5 #import指令
A.6 TLI和TLH檔案
A.7 應該使用哪一種技術
A.8 客戶應用程式示例
A.9 Chapter 6_NativeClient示例

相關詞條

相關搜尋

熱門詞條

聯絡我們