引言
第1章 組件
1.1 使用組件的優(yōu)點
1.1.1 應用程序定制
1.1.2 組件庫
1.1.3 分布式組件
1.2 對組件的需求
1.2.1 動態(tài)鏈接
1.2.2 信息封裝
1.3 COM
1.3.1 COM組件是
1.3.2 COM不是
1.3.3 COM庫
1.3.4 COM方法
1.3.5 COM超越了用戶的需要
1.4 本章小結
第2章 接口
2.1 接口的作用
2.1.1 可復用應用程序架構
2.1.2 COM接口的其他優(yōu)點
2.2 COM接口的實現(xiàn)
2.2.1 編碼約定
2.2.2 一個完整的例子
2.2.3 非接口通信
2.2.4 實現(xiàn)細節(jié)
2.3 接口理論:第二部分
2.3.1 接口的不變性
2.3.2 多態(tài)
2.4 接口的背后
2.4.1 虛擬函數(shù)表
2.4.2 vtbl指針及實例數(shù)據(jù)
2.4.3 多重實例
2.4.4 不同的類, 相同的vtbl
2.5 本章小結
第3章 QueryInterface函數(shù)
3.1 接口查詢
3.1.1 關于IUnknown
3.1.2 IUnknown指針的獲取
3.1.3 關于QuerInterface
3.1.4 QuerInterface的使用
3.1.5 QuerInterface的實現(xiàn)
3.1.6 關于類型轉換
3.1.7 一個完整的例子
3.2 關于QuerInterface的實現(xiàn)規(guī)則
3.2.1 同一IUnknown
3.2.2 客戶可以獲取曾經得到過的接口
3.2.3 可以再次獲取已經擁有的接口
3.2.4 客戶可以從任何接口返回到起始接口
3.2.5 若能夠從某接口獲取某特定接口, 則從任意接口都將能夠獲取此接口
3.3 QuerInterface定義了組件
3.3.1 接口集
3.4 新版本組件的處理
3.4.1 何時需要建立一個新版本
3.4.2 不同版本接口的命名
3.4.3 隱含合約
3.5 本章小結
第4章 引用計數(shù)
4.1 生命期控制
4.2 引用計數(shù)簡介
4.2.1 引用計數(shù)簡介
4.2.2 AddRef和Release的實現(xiàn)
4.3 何時進行引用計數(shù)
4.3.1 引用計數(shù)的優(yōu)化
4.3.2 引用計數(shù)規(guī)則
4.4 本章小結
第5章 動態(tài)鏈接
5.1 組件的創(chuàng)建
5.1.1 從DLI中輸出函數(shù)
5.1.2 DLL的裝載
5.2 客戶和組件的劃分
5.2.1 程序清單
5.3 對象串
5.4 本章小結
第6章 關于HRESULT. GUID. 注冊表及其他細節(jié)
6.1 HRESULT
6.1.1 HRESULT值的查找
6.1.2 HRESULT值的使用
6.1.3 用戶自己代碼的定義
6.2 GUID
6.2.1 為什么要使用GUID
6.2.2 GUID的聲明和定義
6.2.3 GUID的比較
6.2.4 將GUID作為組件標識符
6.2.5 通過引用傳遞GUID值
6.3 Windows注冊表
6.3.1 注冊表的組織
6.3.2 注冊表編輯器
6.3.3 CLSID關鍵字結構
6.3.4 關于注冊表的其他細節(jié)
6.3.5 ProgID
6.3.6 自注冊
6.3.7 組件類別
6.3.8 OleView
6.4 COM庫函數(shù)
6.4.1 COM庫的初始化
6.4.2 內存管理
6.4.3 將字符串轉化成GUID
6.5 本章小結
第7章 類廠
7.1 CoCreateInstance
7.1.1 CoCreateInstance的聲明
7.1.2 CoCreateInstance的使用
7.1.3 類上下文
7.1.4 客戶程序清單
7.1.5 CoCreateInstance的不靈活性
7.2 類廠
7.2.1 CoCetClassObject
7.2.2 IClassFactory
7.2.3 CoCreateInstance與CoGetClassObject的比較
7.2.4 類廠的若干特性
7.3 類廠的實現(xiàn)
7.3.1 DllGetClassObject的使用
7.3.2 組件的創(chuàng)建過程
7.3.3 組件代碼清單
7.3.4 流程控制
7.3.5 組件的注冊
7.4 同一DLL中的多個組件
7.4.1 類廠實現(xiàn)的復用
7.5 DLL的卸載
7.5.1 DllCanUnloadNow的使用
7.5.2 LockServer
7.6 本章小結
第8章 組件復用:包容與聚合
8.1 包容和聚合
8.1.1 包容簡介
8.1.2 聚合簡介
8.1.3 包容與聚合的比較
8.2 包容的實現(xiàn)
8.2.1 接口擴展
8.3 聚合的實現(xiàn)
8.3.1 QueryInterface的實現(xiàn)
8.3.2 不正確的IUnknown
8.3.3 聚合的未知接口
8.3.4 內部組件的創(chuàng)建
8.3.5 外部組件中指向內部組件接口的指針
8.4 一個完整的例子
8.4.1 盲目聚合
8.5 現(xiàn)實世界中的聚合和包容
8.5.1 組件的內部狀態(tài)信息
8.5.2 虛擬函數(shù)的模擬
8.6 本章小結
第9章 編程工作的簡化
9.1 客戶端的簡化
9.1.1 智能接口指針
9.1.2 C++包裝類
9.2 服務器端的簡化
9.2.1 未知接口基類
9.2.2 類廠基類
9.2.3 CUnknown和CFactory的使用
9.2.4 集成步驟
9.3 本章小結
第10章 EXE中的服務器
10.1 不同的進程
10.1.1 本地過程調用
10.1.2 調整
10.1.3 代理/殘根DLL
10.2 IDL/MIDL簡介
10.2.1 關于IDL
10.2.2 IDL接口描述舉例
10.2.3 MIDL編譯器
10.3 本地服務器的實現(xiàn)
10.3.1 示例程序的運行
10.3.2 去掉入口點函數(shù)
10.3.3 類廠的啟動
10.3.4 對LockServer的修改
10.4 遠程訪問能力
10.4.1 DCOMCNFG.EXE所完成的工作
10.4.2 工作機理
10.4.3 其他DCOM信息
10.5 本章小結
第11章 調度接口與自動化
11.1 一種新的通信方式
11.1.1 舊的通信方式
11.1.2 IDispatch接口
11.2 IDispatch的使用
11.2.1 Inuoke函數(shù)的參數(shù)
11.2.2 示例
11.2.3 VARIANT類型
11.2.4 BSTR數(shù)據(jù)類型
11.2.5 SAFEARRAY類型
11.3 類型庫
11.3.1 類型庫的創(chuàng)建
11.3.2 類型庫的使用
11.3.3 注冊表中的類型庫
11.4 IDispatch接口的實現(xiàn)
11.4.1 異常的引發(fā)
11.4.2 參數(shù)調整
11.5 本章小結
第12章 多線程
12.1 COM線程模型
12.1.1 WIN32線程
12.1.2 COM線程
12.1.3 套間
12.1.4 套間線程
12.1.5 自由線程
12.1.6 調整與同步
12.2 套間線程的實現(xiàn)
12.2.1 自動調整
12.2.2 手工調整
12.2.3 編碼
12.2.4 對套間線程例子的說明
12.3 自由線程的實現(xiàn)
12.3.1 對自由線程例子的說明
12.3.2 自由線程參數(shù)調整的優(yōu)化
12.4 關于線程模型的注冊表關鍵字
12.5 本章小結
第13章 一個完整的例子
13.1 Tangram程序
13.1.1 Tangram的運行
13.1.2 所用的組件
13.1.3 客戶程序
13.1.4 TangramModel組件
13.1.5 TangramGdiVisual和TangramGLVisual組件
13.1.6 TangramGdiWorld和TangramGLWorld組件
13.2 展示
13.3 IDL文件
13.3.1 DLIDATA.C文件
13.4 循環(huán)引用計數(shù)
13.4.1 不調用AddRef
13.4.2 使用顯示終止
13.4.3 使用一個單獨的組件
13.5 事件和連接點
13.5.1 IEnumXXX
13.6 本章小結
結束語