收藏 分享(赏)

COM,CORBA与Internet编程技术.docx

上传人:oceanpvg 文档编号:3111463 上传时间:2018-10-03 格式:DOCX 页数:253 大小:852.19KB
下载 相关 举报
COM,CORBA与Internet编程技术.docx_第1页
第1页 / 共253页
COM,CORBA与Internet编程技术.docx_第2页
第2页 / 共253页
COM,CORBA与Internet编程技术.docx_第3页
第3页 / 共253页
COM,CORBA与Internet编程技术.docx_第4页
第4页 / 共253页
COM,CORBA与Internet编程技术.docx_第5页
第5页 / 共253页
点击查看更多>>
资源描述

1、C +Builder 4 高 级 编 程 丛 书CO M , CORBA 与 Internet编 程 技 术徐 新 华 著清 华 大 学 出 版 社( 京 ) 新 登 字 158 号内 容 简 介在 Internet 上 进 行 应 用 程 序 的 开 发 正 成 为 大 势 所 趋 , 而 其 中 COM 和 CORBA 的 作 用 越 来 越 重 要 。 Inprise 公 司 推 出 的 C +Builder 4 对 这 两 种 技 术 提 供 了 很 好 的 支 持 。 本 书 全 面 介 绍 了 这 两 种 技 术 以 及 其 他 一些 当 今 比 较 流 行 的 Internet

2、编 程 技 术 , 如 DAX 技 术 、 ActiveX 控 件 、 自 动 化 服 务 器 、 MTS 和 Winsock 等 , 并 对 T CP、 UDP、 HT TP、 FTP、 SMT P 等 Internet 上的 常 用 协 议 在 C +Builder 4 中 的 应 用 方 法 作 了 解 释 。 本 书 最 后 还 详 细 介 绍 了 Web 服 务 器 应 用 程 序 。本 书 内 容 翔 实 , 叙 述 简 洁 , 为 读 者 掌 握 C +Builder 4 的 Internet 开 发 技 术 提 供 了 很 好 的 指 导 。 而 且由 于 书 中 很 多 内

3、容 具 有 普 遍 性 , 因 此 对 使 用 其 他 开 发 工 具 的 读 者 也 有 一 定 的 参 考 作 用 。版 权 所 有 , 翻 印 必 究 。 本 书 封 面 贴 有 清 华 大 学 出 版 社 激 光 防 伪 标 签 , 无 标 签 者 不 得 销 售 。书 名 : COM , CORBA 与 Internet 编 程 技 术作 者 : 徐 新 华 著出 版 者 : 清 华 大 学 出 版 社 ( 北 京 清 华 大 学 学 研 楼 , 邮 编 100084) ht tp :/ / www .t up .tsinghua .edu .cn责 任 编 辑 : 刘 彤 汤 斌

4、浩印 刷 者 : 胶 印 厂发 行 者 : 新 华 书 店 总 店 北 京 发 行 所开 本 : 787 1092 1/ 16 印 张 : 15 .25 字 数 : 351 千 字版 次 : 2000 年 月 第 1 版 2000 年 月 第 1 次 印 刷书 号 : ISBN印 数 : 0001 10000 册定 价 : 0 .00 元前 言C +Builder 4 是 Inprise 公 司 ( 原 为 Borland 公 司 ) 1999 年 第 二 季 度 推 出 的 拳 头 产 品 ,是 当 今 世 界 上 最 优 秀 的 C + 和 分 布 式 应 用 程 序 开 发 工 具 。

5、C +Builder 4 最 接 近 ISO 的 C+ 标 准 ; 同 时 支 持 COM 与 CO RBA 两 大 分 布 式 计 算 规 范 ; 内 建 了 全 球 O RB 分 发 数 量 最 多 的 VisiBroker 3 .3 , 集 成 了 CORBA IDL 编 译 器 ; 进 一 步 兼 容 了 Microsoft Visual C + 的 代码 ; 增 强 了 远 程 调 试 功 能 ; 提 供 了 访 问 O racle 8、 Microsoft SQ L Server 7、 Informix 9、 Sybase R11、 IBM DB/ 2 U niversal Ser

6、ver、 InterBase 5 .5 等 企 业 级 数 据 库 的 原 生 驱 动 程 序 ; 完 全 支 持 Microsoft Tra nsaction Server ; 内 含 最 新 的 M IDAS 2 , 同 时 支 持 CO RBA I IOP、 DCOM、 DCE R PC 及 TCP/ IP 等 多 种 连 接 方 式 ; 支 持 CGI、 WI N-CGI、 ISAPI 及 NSAPI , 可 以 轻 松 地 开 发 基 于 Web 的 应 用 程 序 。为 了 帮 助 广 大 用 户 全 面 、 准 确 地 掌 握 C +Builder 4 的 编 程 思 想 和 用

7、 法 , 我 们 编 写 了 这 套 C +Builder 4 高 级 编 程 丛 书 , 主 要 针 对 那 些 已 初 步 掌 握 了 C +Builder 4 的 基 本 用 法 , 但 现 在 需 要 进 一 步 精 通 和 提 高 的 读 者 。 本 丛 书 紧 紧 把 握 住 C +Builder 4 的 基 本 特 征 面 向 对 象 , 重 点 从 类 这 一 层 次 把 编 程 思 想 讲 透 。 只 要 深 刻 领 会 了 面 向 对 象 的 编 程 思 想 , 那 些 看 上 去 高 深 莫 测 的 领 域 , 如 COM、 ActiveX、 CO RBA、 M IDAS

8、 也 就 很 容 易 理 解 了 。本 套 丛 书 分 为 四 册 , 第 一 册 是 集 成 开 发 环 境 与 面 向 对 象 编 程 技 术 , 第 二 册 是 图 形用 户 界 面 编 程 技 术 , 第 三 册 是 数 据 库 与 M IDAS 编 程 技 术 , 第 四 册 是 COM, CORBA 与 In ternet 编 程 技 术 。由 于 我 们 的 水 平 有 限 , 再 加 上 时 间 紧 迫 , 因 此 尽 管 做 了 严 格 的 审 核 和 测 试 , 书 中 可 能还 是 难 免 有 一 些 错 误 , 敬 请 广 大 读 者 不 吝 赐 教 , 谨 在 此 表

9、 示 感 谢 。为 了 帮 助 广 大 程 序 员 更 好 地 掌 握 这 个 优 秀 的 开 发 工 具 , 我 们 愿 意 为 购 买 此 书 的 读 者提 供 免 费 的 技 术 咨 询 。北 京 东 大 阿 尔 发 软 件 技 术 有 限 公 司地 址 : 北 京 市 上 地 信 息 产 业 基 地 上 地 村 路 1 号 ( 100085 )电 话 : ( 010) 62987260 传 真 : ( 010) 62985141网 址 : h ttp :/ / www .allfa .com .cn 邮 件 : books allfa .com .cn 目 录第 一 章 组 件 对 象

10、 模 型 11 .1 几 个 基 本 概 念 11 .2 客 户 与 服 务 器 21 .3 认 识 GU ID、 CLSID、 I ID 31 .4 引 用 计 数 31 .5 虚 拟 方 法 表 41 .6 I U nknow n 接 口 41 .7 接 口 51 .8 调 度 接 口 71 .9 双 重 接 口 81 .10 对 接 口 的 引 用 101 .11 动 态 链 接 库 形 式 的 COM 服 务 器 111 .12 创 建 COM 对 象 的 一 般 步 骤 11第 二 章 ActiveX 框 架 142 .1 什 么 是 ActiveX 框 架 142 .2 T In

11、terfacedObject 152 .3 TComObject 152 .4 T TypedCom Object 162 .5 T AutoObject 172 .6 T AutoIntfObject 182 .7 T ActiveXCont rol 182 .8 TComServerObject 212 .9 TComServer 222 .10 TActiveFor m 242 .11 TP ropertyPage 252 .12 TComObjectFactory 262 .13 T T ypedComObjectFactory 292 .14 TActiveXProperty Pag

12、eFactory 302 .15 TAutoObjectFactory 302 .16 TActiveXCon trolFactory 312 .17 TActiveFor mFactory 33第 三 章 Type Library 编 辑 器 343 .1 关 于 类 型 库 的 概 述 34 3 .2 T ype Library 编 辑 器 的 基 本 操 作 353 .2 .1 创 建 一 个 新 的 类 型 库 353 .2 .2 打 开 一 个 已 有 的 类 型 库 363 .2 .3 刷 新 类 型 库 363 .2 .4 保 存 和 注 册 类 型 库 373 .2 .5 把

13、类 型 库 引 入 到 当 前 项 目 中 373 .2 .6 引 出 类 型 库 383 .2 .7 发 布 类 型 库 393 .3 T ype Library 编 辑 器 的 窗 口 393 .4 类 型 库 的 一 般 信 息 403 .5 接 口 423 .6 在 接 口 中 加 入 成 员 433 .7 调 度 接 口 453 .8 类 型 库 枚 举 463 .9 组 件 类 473 .10 别 名 、 记 录 、 联 合 、 模 块 48第 四 章 创 建 ActiveX 控 件 504 .1 创 建 和 使 用 ActiveX 控 件 504 .2 向 导 创 建 了 哪 些

14、 文 件 524 .2 .1 项 目 文 件 534 .2 .2 类 型 库 的 接 口 源 文 件 544 .2 .3 类 型 库 接 口 的 实 现 文 件 544 .2 .4 About 框 的 源 文 件 554 .3 编 辑 类 型 库 564 .3 .1 在 接 口 中 加 入 新 的 成 员 564 .3 .2 加 入 新 的 特 性 574 .3 .3 加 入 新 的 方 法 574 .4 数 据 捆 绑 584 .5 创 建 特 性 页 604 .6 注 册 和 安 装 ActiveX 控 件 634 .7 怎 样 使 用 ActiveX 控 件 654 .8 ActiveF

15、orm 654 .9 在 Web 上 发 布 ActiveX 684 .9 .1 Project 页 684 .9 .2 Pack ages 页 694 .9 .3 Additional Files 页 704 .9 .4 Code Signing 页 70 第 五 章 对 象 链 接 与 嵌 入 自 动 化 715 .1 怎 样 操 纵 自 动 化 对 象 715 .1 .1 通 过 引 入 类 型 库 来 操 纵 自 动 化 服 务 器 715 .1 .2 通 过 调 用 Varian t E xec 来 操 纵 自 动 化 服 务 器 735 .1 .3 迟 后 联 编 735 .2 怎

16、 样 创 建 自 动 化 服 务 器 745 .3 自 动 化 对 象 的 类 型 库 755 .4 注 册 和 调 试 自 动 化 对 象 77第 六 章 创 建 微 软 交 易 服 务 器 对 象 796 .1 M TS 组 件 796 .2 管 理 资 源 816 .3 M TS 事 务 826 .4 基 于 角 色 的 安 全 检 查 826 .5 资 源 分 配 器 826 .6 基 客 户 856 .7 M TS 与 COM、 DCOM 856 .8 创 建 M TS 对 象 的 一 般 步 骤 866 .9 向 导 生 成 了 哪 些 文 件 876 .10 把 M TS 对 象

17、 安 装 到 M TS 包 中 886 .11 M TS E xplorer 89第 七 章 CORBA 应 用 程 序 917 .1 CORBA 应 用 程 序 的 体 系 结 构 917 .2 进 一 步 理 解 St ub、 Skeleton 和 Smart Agent 927 .3 激 活 CORBA 服 务 器 927 .4 创 建 CORBA 服 务 器 的 一 般 步 骤 937 .5 定 义 对 象 接 口 937 .6 CORBA Server 向 导 947 .7 从 IDL 文 件 中 生 成 St ub 和 Sk eleton 967 .8 CORBA Object I

18、 mplemen tation 向 导 977 .9 实 例 化 CORBA 对 象 977 .10 使 用 委 托 模 式 987 .11 实 现 CO RBA 对 象 987 .12 防 止 线 程 冲 突 1007 .13 在 接 口 库 中 注 册 接 口 1017 .14 CO RBA 客 户 程 序 1027 .15 使 用 Stub 1047 .16 使 用 DI I 1057 .17 测 试 CO RBA 服 务 器 106 7 .19 .1 启 动 Smar t Agen t 1077 .19 .2 配 置 ORB 域 1077 .19 .3 连 接 不 同 局 域 网 上

19、的 Smar t Agen t 1077 .18 分 发 CO RBA 应 用 程 序 1067 .19 配 置 Smar t Agen t 107第 八 章 使 用 WinSock 1098 .1 关 于 Socket 的 概 述 1098 .2 建 立 服 务 器 端 Socket 1108 .3 建 立 客 户 端 Socket 1108 .4 怎 样 在 网 络 上 传 输 数 据 1118 .5 在 客 户 端 使 用 多 线 程 技 术 1128 .6 在 服 务 器 端 使 用 多 线 程 技 术 1138 .7 TCustomW inSocket 1148 .8 TClient

20、 WinSocket 1208 .9 TServerWinSocket 1218 .10 TServerClient WinSocket 1248 .11 TWinSock etSt ream 1258 .12 一 个 网 上 交 谈 ( Ch at ) 程 序 127第 九 章 Internet 协 议 1329 .1 T Powersock 1329 .1 .1 T Powersock 的 特 性 1329 .1 .2 T Powersock 的 方 法 1359 .1 .3 T Powersock 的 事 件 1389 .2 使 用 F T P 控 件 1419 .2 .1 FT P 控

21、 件 的 特 性 1419 .2 .2 FT P 控 件 的 方 法 1439 .2 .3 FT P 控 件 的 事 件 1489 .3 使 用 UDP 控 件 1509 .3 .1 使 用 UDP 控 件 的 一 般 步 骤 1509 .3 .2 UDP 控 件 的 特 性 1509 .3 .3 UDP 控 件 的 方 法 1519 .3 .4 UDP 控 件 的 事 件 1529 .4 使 用 H T TP 控 件 1539 .4 .1 H T TP 控 件 的 特 性 1549 .4 .2 H T TP 控 件 的 方 法 1559 .4 .3 H T TP 控 件 的 事 件 1579

22、 .5 使 用 SM TP 控 件 1589 .5 .1 SM TP 控 件 的 特 性 159 9 .5 .2 SM TP 控 件 的 方 法 1609 .5 .3 SM TP 控 件 的 事 件 1619 .6 使 用 POP 控 件 1629 .6 .1 POP 控 件 的 特 性 1629 .6 .2 POP 控 件 的 方 法 1659 .6 .3 POP 控 件 的 事 件 1669 .7 使 用 N N TP 控 件 1679 .7 .1 NN TP 控 件 的 特 性 1689 .7 .2 NN TP 控 件 的 方 法 1719 .7 .3 NN TP 控 件 的 事 件 1

23、729 .8 使 用 H T M L 控 件 1749 .8 .1 H TM L 控 件 概 述 1749 .8 .2 H TM L 控 件 的 特 性 1759 .8 .3 H TM L 控 件 的 方 法 1809 .8 .4 H TM L 控 件 的 事 件 181第 十 章 创 建 Web 服 务 器 应 用 程 序 18510 .1 WWW 是 怎 样 工 作 的 18510 .2 静 态 的 H T ML 页 面 18510 .3 动 态 的 H T ML 页 面 18910 .4 怎 样 与 客 户 交 互 19010 .5 交 互 生 成 页 面 19310 .6 与 数 据

24、库 的 连 接 19410 .7 怎 样 调 试 Web 服 务 器 应 用 程 序 19610 .7 .1 调 试 ISAP I 或 NSAPI 类 型 的 Web 服 务 器 应 用 程 序 19710 .7 .2 调 试 CGI 或 Win-CGI 类 型 的 Web 服 务 器 应 用 程 序 198第 十 一 章 Web 服 务 器 的 细 节 19911 .1 Web 服 务 器 应 用 程 序 的 逻 辑 结 构 19911 .2 Web 模 块 19911 .3 Web 调 度 器 20111 .4 动 作 项 20211 .5 H T T P 请 求 消 息 20511 .5

25、 .1 H T T P 请 求 消 息 是 怎 样 传 递 的 20511 .5 .2 TWebRequest 是 怎 样 声 明 的 20611 .5 .3 TWebRequest 对 象 的 特 性 和 方 法 20711 .5 .4 T ISAPIRequest 对 象 21211 .5 .5 TCGIRequest 对 象 21311 .5 .6 TWinCG IRequest 对 象 21411 .6 H T T P 响 应 消 息 214 11 .6 .1 怎 样 建 立 H T T P 响 应 消 息 21411 .6 .2 怎 样 传 递 H T T P 响 应 消 息 215

26、11 .6 .3 自 己 传 递 H T T P 响 应 消 息 21511 .6 .4 TWebResponse 是 怎 样 声 明 的 21511 .6 .5 TWebResponse 对 象 的 特 性 和 方 法 21611 .6 .6 T ISAPIResponse 对 象 22011 .6 .7 TCGIResponse 对 象 22111 .6 .8 TWinCG IResponse 对 象 22111 .7 页 面 生 成 器 22111 .7 .1 怎 样 建 立 H T ML 模 板 22111 .7 .2 指 定 H T ML 模 板 22311 .7 .3 转 换 并

27、返 回 转 换 后 的 结 果 22311 .7 .4 怎 样 转 换 ( O nH T ML Tag 事 件 ) 22311 .7 .5 TDataSetPageProducer 22511 .8 操 纵 Web 服 务 器 应 用 程 序 22511 .8 .1 TWebApplication 对 象 22511 .8 .2 TCGIApplication 对 象 22711 .8 .3 T ISAPIApplication 对 象 22711 .9 Web 服 务 器 与 数 据 库 22811 .9 .1 用 TSession 管 理 与 数 据 库 的 连 接 22811 .9 .2

28、 TDataSet TableProducer 元 件 22811 .9 .3 TQ uery TableProducer 元 件 23111 .10 两 个 典 型 的 Web 服 务 器 应 用 程 序 232 第 一 章 组 件 对 象 模 型组 件 对 象 模 型 ( COM, Component Object Model ) 是 组 件 对 象 之 间 相 互 接 口 的 规 范 。 凡 是 遵 循 COM 接 口 规 范 的 对 象 彼 此 之 间 都 能 相 互 通 信 和 交 互 , 即 使 这 些 对 象 是 由 不 同的 厂 商 、 用 不 同 的 语 言 、 针 对 不

29、同 的 Windows 版 本 甚 至 在 不 同 的 机 器 上 编 写 和 建 立 的 。C +Builder 4 支 持 COM 接 口 规 范 , C + 语 言 增 加 了 对 象 接 口 的 语 法 。 用 C +Builder 4 创 建 的 COM 对 象 还 可 以 工 作 在 微 软 交 易 服 务 器 ( M TS , Microsoft T ransaction Server ) 环境 中 。 本 章 详 细 介 绍 组 件 对 象 模 型 的 体 系 结 构 , 并 用 C +Builder 4 实 际 创 建 一 个 COM 服 务 器 。1 .1 几 个 基 本

30、概 念软 件 重 用 是 业 界 追 求 的 目 标 , 人 们 一 直 希 望 能 够 像 搭 积 木 一 样 随 意 “ 装 配” 应 用 程 序 , 组 件 对 象 就 充 当 了 积 木 的 角 色 。 所 谓 组 件 对 象 , 实 际 上 就 是 预 定 义 好 的 、 能 完 成 一 定 功 能 的 服 务 或 接 口 。 问 题 是 , 这 些 组 件 对 象 如 何 与 应 用 程 序 、 其 他 组 件 对 象 共 存 并 相 互 通 信 和 交 互 , 这 就 需 要 制 定 一 个 规 范 , 让 这 些 组 件 对 象 按 统 一 的 标 准 方 式 工 作 。COM

31、 是 个 二 进 制 规 范 , 它 与 源 代 码 无 关 。 这 样 , 即 使 COM 对 象 由 不 同 的 编 程 语 言创 建 , 运 行 在 不 同 的 进 程 空 间 和 不 同 的 操 作 系 统 平 台 , 这 些 对 象 也 能 相 互 通 信 。 COM 既 是 规 范 , 也 是 实 现 , 它 以 COM 库 ( OL E 32 .dll 和 OLEAu t32 .dll) 的 形 式 提 供 了 访 问 COM 对 象 核 心 功 能 的 标 准 接 口 以 及 一 组 AP I 函 数 , 这 些 API 用 于 实 现 创 建 和 管 理 COM 对 象 的

32、功 能 。COM 本 质 上 仍 然 是 客 户 / 服 务 器 模 式 。 客 户 ( 通 常 是 应 用 程 序 ) 请 求 创 建 COM 对 象并 通 过 COM 对 象 的 接 口 操 纵 COM 对 象 。 服 务 器 根 据 客 户 的 请 求 创 建 并 管 理 COM 对 象 。 客 户 和 服 务 器 这 两 种 角 色 并 不 是 绝 对 的 。组 件 对 象 与 一 般 意 义 上 的 对 象 既 相 似 也 有 区 别 , 一 般 意 义 上 的 对 象 是 一 种 把 数 据 和操 纵 数 据 的 方 法 封 装 在 一 起 的 数 据 类 型 的 实 例 , 而

33、组 件 对 象 使 用 接 口 ( In terface ) 而 不 是方 法 来 描 述 自 己 并 提 供 服 务 。 所 谓 接 口 , 其 精 确 定 义 是 “ 基 于 对 象 的 一 组 语 义 上 相 关 的 功 能” , 实 际 上 是 一 个 纯 虚 类 , 真 正 实 现 接 口 的 是 接 口 对 象 ( Interface Object ) 。 一 个 COM 对 象可 以 只 有 一 个 或 几 个 接 口 , 例 如 Windows 95 外 壳 扩 展 , 也 可 以 有 许 多 接 口 , 例 如 Ac- tiveX 控 件 一 般 就 有 多 个 接 口 ,

34、客 户 可 以 从 很 多 方 面 来 操 纵 ActiveX 控 件 。接 口 是 客 户 与 服 务 器 通 信 的 唯 一 途 径 , 客 户 只 能 通 过 接 口 访 问 接 口 对 象 中 的 方 法 , 而 不 能 访 问 该 对 象 中 的 数 据 。 如 果 一 个 组 件 对 象 有 多 个 接 口 , 通 过 一 个 接 口 不 能 直 接 访 问其 他 接 口 。 但 是 , COM 模 型 提 供 了 这 样 一 种 策 略 , 就 是 允 许 客 户 调 用 COM 库 中 的 Q ueryIn terface 函 数 去 查 询 组 件 对 象 所 支 持 的 其

35、 他 接 口 。 从 这 个 意 义 上 讲 , 组 件 对 象 有 点像 接 口 对 象 的 经 纪 人 (Broker ) 。 当 客 户 调 用 QueryInterface 函 数 后 , 如 果 组 件 对 象 正 好 支 1 持 要 查 询 的 接 口 , 函 数 就 返 回 该 接 口 的 指 针 ; 如 果 组 件 对 象 不 支 持 该 接 口 , 函 数 就 返 回 一个 出 错 信 息 。 所 以 , Q ueryInterface 函 数 是 很 有 用 的 , 它 可 以 动 态 了 解 组 件 对 象 所 支 持 的接 口 。接 口 实 际 上 是 面 向 对 象

36、编 程 思 想 的 一 种 体 现 , 它 隐 藏 了 COM 对 象 实 现 服 务 的 细 节 。 COM 对 象 可 以 完 全 独 立 于 访 问 它 的 客 户 , 只 要 接 口 本 身 保 持 不 变 。 如 果 实 在 需 要 更 新 接口 , 可 以 重 新 定 义 一 个 新 的 接 口 , 对 于 使 用 老 接 口 的 客 户 来 说 , 代 码 得 到 了 最 大 程 度 的保 护 。1 .2 客 户 与 服 务 器COM 本 质 上 仍 然 是 客 户 / 服 务 器 模 式 。 COM 服 务 器 实 际 上 是 组 件 对 象 的 容 器 , COM 服 务 器

37、 中 的 组 件 对 象 向 COM 客 户 提 供 服 务 。 COM 客 户 通 常 是 EXE , 也 可 能 是 DLL , 甚 至 就 是 Windows 自 己 。 COM 客 户 一 般 应 独 立 于 COM 服 务 器 , 因 为 COM 客 户 并 不 知 道 COM 服 务 器 在 哪 儿 , 怎 样 把 它 唤 醒 , 甚 至 连 有 没 有 这 样 的 COM 服 务 器 都 不 知 道 。当 一 个 客 户 请 求 某 个 COM 对 象 的 服 务 时 , 客 户 需 要 传 递 一 个 类 的 标 识 符 ( CLSID ) , 请 求 Windows 去 查

38、找 组 件 对 象 在 哪 儿 , 找 到 以 后 把 接 口 的 指 针 传 递 给 客 户 。 Window s 将 从 注 册 表 中 查 找 COM 服 务 器 的 位 置 并 定 位 一 个 合 适 的 COM 对 象 。根 据 COM 服 务 器 与 COM 客 户 是 否 运 行 在 同 一 个 进 程 地 址 空 间 , COM 服 务 器 分 为三 类 , 分 别 是 In-Process 服 务 器 、 Out-of-Process 服 务 器 和 Remote 服 务 器 。In-Process 服 务 器 通 常 是 DL L, 它 映 射 到 客 户 的 进 程 地

39、址 空 间 中 运 行 。 例 如 , 一 个 嵌入在 Web 网 页 中 的 ActiveX 控 件 , 与 Internet E xplorer 在 同 一 个 进 程 地 址 空 间 中 运 行 。 对 于 In-P rocess 服 务 器 来 说 , 客 户 可 以 直 接 调 用 COM 对 象 的 接 口 。Out-of-Process 或 Local 服 务 器 通 常 是 EXE , 它 与 COM 客 户 在 同 一 个 机 器 上 , 但 在 不 同 的 进 程 地 址 空 间 运 行 。 例 如 , 一 个 Excel 电 子 表 格 嵌 入 到 Word 文 档 中

40、。Remote 服 务 器 可 以 是 EXE 也 可 以 是 DLL , 它 与 COM 客 户 运 行 在 不 同 的 机 器 上 。 例 如 , 用 C +Builder 4 编 写 的 应 用 服 务 器 与 “瘦 ”客 户 程 序 通 常 不 在 同 一 个 机 器 上 运 行 。图 1 .1 是 Out-of-Process 服 务 器 和 Remote 服 务 器 的 示 意 图 。图 1 .1 跨 进 程 边 界 甚 至 跨 机 器 边 界 2 对 于 Remote 服 务 器 来 说 , 它 已 经 跨 越 了 机 器 边 界 , 如 果 仍 然 用 COM 来 描 述 这

41、种 模型显 然 是 不 够 的 。 Microsoft 扩 展 了 COM 模 型 , 推 出 了 称 为 Distributed COM ( 简 称 DCOM ) 的 模 型 。 DCOM 最 初 是 在 Visual Basic 4 .0 的 专 业 版 中 被 引 入 的 , 目 前 只 有 Win- dows N T 4 .0 才 真 正 实 现 了 DCOM , Windows 95 需 要 安 装 一 个 特 殊 的 软 件 才 能 支 持 DCOM。为 什 么 客 户 能 够 跨 进 程 边 界 甚 至 跨 机 器 边 界 访 问 组 件 对 象 , 这 就 是 COM 模 型

42、中 一种 称 为 Marshaling 的 策 略 。 Marshaling 实 际 上 是 一 种 打 包 技 术 , 先 把 要 跨 边 界 传 递 的 函数 调 用 信 息 进 行 必 要 的 转 换 并 打 包 , 然 后 传 递 给 另 一 个 进 程 甚 至 另 一 个 机 器 , 到 达 目 的 地 后 再 解 包 并 调 用 当 地 的 组 件 对 象 。 不 过 , 这 种 跨 进 程 边 界 或 机 器 边 界 的 传 递 是 相 当 费 劲的 。 如 果 COM 服 务 器 是 DL L 的 话 , 就 用 不 着 Marshaling , 因 为 客 户 和 COM 服

43、 务 器 在 同一 个 进 程 地 址 空 间 运 行 , 这 种 情 况 下 , 客 户 只 要 搜 索 虚 拟 方 法 表 。基 于 标 准 的 远 程 过 程 调 用 ( R PC ) , IDispatch 接 口 提 供 了 通 用 的 Marshaling 策 略 。COM 对 象 也 可 以 自 定 义 Marshaling 策 略 , 不 过 , 自 定 义 的 Marshaling 策 略 不 具 有 通 用 性 。1 .3 认 识 GUID、 CLSID、 IID在 一 个 复 杂 的 系 统 中 , 可 能 充 斥 着 大 量 的 组 件 对 象 , 每 个 组 件 对

44、象 可 能 又 有 大 量 的 接 口 。 为 了 保 证 这 些 接 口 彼 此 不 会 冲 突 , 微 软 公 司 规 定 用 全 局 唯 一 标 识 符 ( GU ID, Globally U nique Iden tifier ) 来 标 识 组 件 对 象 。 GU ID 可 以 标 识 组 件 对 象 的 类 , 这 时 候 GU ID 也 称 为类 标 识 符 ( CLSID, Class Identifier ) 。 GU ID 也 可 以 标 识 组 件 对 象 的 接 口 , 这 时 候 GU ID 也 称 为 接 口 标 识 符 ( I ID, In terface Id

45、entifier ) 。GU ID 是 一 个 128 位 整 数 ( 16 字 节 ) , 绝 对 能 保 证 每 一 个 组 件 对 象 具 有 唯 一 的 标 识 符 。 在 C +Builder 4 中 , 接 口 的 名 称 一 般 以 大 写 的 字 母 I 打 头 , 例 如 I Malloc 和 IPersist。1 .4 引 用 计 数引 用 计 数 是 一 种 机 制 , 使 组 件 对 象 具 有 一 定 的 “ 智 能 性” 。 它 的 工 作 原 理 是 : 当 接 口 对 象 第 一 次 创 建 时 , 引 用 计 数 的 初 始 值 为 1 ; 当 再 有 一 个

46、 客 户 请 求 获 得 接 口 对 象 的 指 针 时 , 就 调 用 AddR ef 使 该 计 数 加 1 ; 当 某 客 户 不 再 需 要 组 件 对 象 的 服 务 时 , 它 应 当 调 用 Release。 注 意 , R elease 并 不 真 正 释 放 接 口 对 象 , 因 为 可 能 还 有 其 他 客 户 正 在 使 用 , Release 只 是 使 引 用 计 数 减 1。 只 有 当 引 用 计 数 正 好 减 为 零 时 , 接 口 对 象 才 被 删 除 。下 面 举 例 说 明 引 用 计 数 的 作 用 。 假 设 客 户 A 向 服 务 器 请 求

47、 I Malloc 接 口 , 服 务 器 收到 请 求 后 , 首 先 看 该 接 口 对 象 是 否 存 在 , 如 果 没 有 , 就 创 建 一 个 接 口 对 象 , 并 调 用 AddR ef 使 引 用 计 数 变 为 1 , 同 时 把 该 接 口 对 象 的 指 针 传 递 给 客 户 A。 假 设 这 时 候 客 户 B 也 加 入进 来 , 并 且 也 是 请 求 IMalloc 接 口 , 由 于 此 时 I Malloc 接 口 对 象 已 存 在 , 服 务 器 只 是 简 单 地返 回 一 个 指 针 , 并 且 调 用 AddRef 使 引 用 计 数 变 为

48、2。 当 客 户 A 不 再 需 要 I Malloc 接 口 时 , 它 就 调 用 Release 试 图 释 放 这 个 接 口 。 显 然 , 这 时 候 不 能 删 除 I Malloc 接 口 对 象 , 因 为 客 户 3 B 还 在 用 着 呢 。 可 见 , 引 用 计 数 这 种 机 制 使 服 务 器 知 道 怎 样 管 理 自 己 的 接 口 。 引 用 计 数 这 种 机 制 也 带 来 一 个 问 题 , 就 是 调 用 AddRef 和 Release 时 不 能 出 现 混 乱 , 一旦 出 现 混 乱 , 可 能 导 致 接 口 对 象 永 远 不 被 删 除

49、 或 者 过 早 地 被 删 除 。1 .5 虚 拟 方 法 表COM 是 个 二 进 制 规 范 , 任 何 开 发 环 境 只 要 遵 守 这 个 规 范 , 都 可 以 生 产 出 COM 对 象 。 COM 采 用 一 种 称 为 虚 拟 方 法 表 ( virtual met hod table ) 的 语 法 来 解 决 方 法 调 用 。 不 过 , COM 接 口 与 Object Pascal 的 类 还 是 有 一 些 区 别 的 。 COM 接 口 中 凡 是 要 暴 露 给 客 户 的 方法 必 须 声 明 为 纯 虚 方 法 , 客 户 得 到 的 只 是 指 向 虚 拟 方 法 表 的 指 针 , 具 体 实 现 接 口 的 是 接 口 对 象

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > 计算机原理

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报