第 六 章 O L E 自 动 化

第 六 章 O L E 自 动 化 - 图1第 六 章 O L E 自 动 化 - 图2第 六 章 O L E 自 动 化 - 图3第 六 章 O L E 自 动 化 - 图4第 六 章 O L E 自 动 化 - 图5第 六 章 O L E 自 动 化 - 图6第 六 章 O L E 自 动 化 - 图7所 谓 OL E 自 动 化 ( O L E A u to m a tio n ) 是 W ind ow s 应 用 程 序 之 间 相 互 操 纵 的 一种 技 巧 被 操 纵 的 一 端 称 为 自 动 化 对 象 或 自 动 化 服 务 器 而 操 纵 自 动 化 对象 的 一 端 称 为 自 动 化 控 制 器 或 自 动 化 客 户 一 个 应 用 程 序 或 DL L 可 以 兼 具服 务 器 和 客 户 两 种 角 色 本 章 的 重 点 是 怎 样 操 纵 OL E 自 动 化 对 象 怎 样 创建 自 动 化 服 务 器

1 怎 样 操 纵 自 动 化 对 象

第 六 章 O L E 自 动 化 - 图8第 六 章 O L E 自 动 化 - 图9第 六 章 O L E 自 动 化 - 图10第 六 章 O L E 自 动 化 - 图11第 六 章 O L E 自 动 化 - 图12要 操 纵 自 动 化 对 象 您 首 先 要 创 建 自 动 化 控 制 器 或 者 称 自 动 化 客 户 在 C+ + Bu i ld e r 3 中 要 创 建 自 动 化 客 户 有 两 种 方 式 引 入 类 型 库 和 调 用V a r ia n t::E x e c

6. 1 . 1 通 过 引 入 类 型 库 来 操 纵 自 动 化 服 务 器

第 六 章 O L E 自 动 化 - 图13第 六 章 O L E 自 动 化 - 图14第 六 章 O L E 自 动 化 - 图15第 六 章 O L E 自 动 化 - 图16第 六 章 O L E 自 动 化 - 图17第 六 章 O L E 自 动 化 - 图18第 六 章 O L E 自 动 化 - 图19第 六 章 O L E 自 动 化 - 图20第 六 章 O L E 自 动 化 - 图21第 六 章 O L E 自 动 化 - 图22要 引 入 自 动 化 服 务 器 的 类 型 库 使 用 P ro ject 菜 单 上 的 Im port T y pe L ib ra r y 命 令 C+ + Bu ild e r 3 将 打 开 Im port T y pe L ibra r y 对 话 框 如 图 6 .1 所 示

第 六 章 O L E 自 动 化 - 图23

图 6 .1 引 入 类 型 库

第 六 章 O L E 自 动 化 - 图24第 六 章 O L E 自 动 化 - 图25第 六 章 O L E 自 动 化 - 图26第 六 章 O L E 自 动 化 - 图27第 六 章 O L E 自 动 化 - 图28第 六 章 O L E 自 动 化 - 图29第 六 章 O L E 自 动 化 - 图30第 六 章 O L E 自 动 化 - 图31第 六 章 O L E 自 动 化 - 图32选 择 其 中 一 个 类 型 库 如 M ic ros oft W o rd 8 .0 O b je c t L ibra ry 然 后 单 击 OK 按 钮 如 果 要 引 入 的 类 型 库 没 有 列 出 来 可 能 是 因 为 还 没 有 注 册 此 时 就单 击 A d d 按 钮 先 注 册

第 六 章 O L E 自 动 化 - 图33第 六 章 O L E 自 动 化 - 图34第 六 章 O L E 自 动 化 - 图35引 入 了 类 型 库 后 C+ + Bu ild e r 3 会 自 动 生 成 该 类 型 库 的 C+ + 外 套 文 件 从 中可 以 看 出 类 型 库 中 的 所 有 GU ID 常 量 和 组 件 类 (C o C la s s )

第 六 章 O L E 自 动 化 - 图36第 六 章 O L E 自 动 化 - 图37第 六 章 O L E 自 动 化 - 图38第 六 章 O L E 自 动 化 - 图39第 六 章 O L E 自 动 化 - 图40如 果 要 通 过 自 动 化 服 务 器 中 的 双 重 接 口 来 操 纵 自 动 化 服 务 器 您 首 先 要 用一 个 Co C la s s 客 户 代 理 类 来 创 建 自 动 化 对 象 的 一 个 实 例 程 序 示 例 如 下T C O M W o rd B a s ic w b = C o A p p licatio n : : C re ate( ) ;

第 六 章 O L E 自 动 化 - 图41第 六 章 O L E 自 动 化 - 图42第 六 章 O L E 自 动 化 - 图43注 意 您 必 须 在 自 动 化 客 户 程 序 中 包 含 C+ + 外 套 的 头 文 件 否 则 上 面 一 行

第 六 章 O L E 自 动 化 - 图44第 六 章 O L E 自 动 化 - 图45代 码 将 出 错 因 为 编 译 器 找 不 到 C o A p p lic a tio n 和 TC O M W o rd B a s ic 的 声 明

第 六 章 O L E 自 动 化 - 图46第 六 章 O L E 自 动 化 - 图47第 六 章 O L E 自 动 化 - 图48创 建 了 自 动 化 对 象 的 实 例 后 您 就 可 以 调 用 自 动 化 对 象 中 的 方 法 完 整 的示 例 如 下

v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )

{

T C O M W o rd B a s ic w b = C o A p p lic a tio n ::C re a te ( ) ; if (O p e n D ia lo g 1 -> E x e c u te ( ))

w b -> F ile P rin t( V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) ,

V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t( O p e n D ia lo g 1 -> F ile N a m e ) , V a r ia n t::N o P a ra m ( ) ) ;

}

第 六 章 O L E 自 动 化 - 图49如 果 要 通 过 自 动 化 服 务 器 中 的 调 度 接 口 来 操 纵 自 动 化 服 务 器 首 先 要 用

第 六 章 O L E 自 动 化 - 图50第 六 章 O L E 自 动 化 - 图51第 六 章 O L E 自 动 化 - 图52第 六 章 O L E 自 动 化 - 图53Co C la s s 客 户 代 理 类 来 创 建 自 动 化 对 象 的 一 个 实 例 程 序 示 例 如 下

W o rd B a s ic D is p w b = C o A p p lic a tio n :: C re a te ( ) ;

第 六 章 O L E 自 动 化 - 图54第 六 章 O L E 自 动 化 - 图55第 六 章 O L E 自 动 化 - 图56调 用 B in d 函 数 并 且 把 'W ord .B a s ic '作 为 参 数 传 递 给 它 完 整 的 示 例 如 下

v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )

{

W o rd B a s ic D is p w b = C o A p p lic a tio n ::C re a te ( ) ; w b .B ind ( 'W ord .B a s ic ') ;

if (O p e n D ia lo g 1 -> E x e c u te ( ))

w b .F ile P rin t( V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) ,

V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t::N o P a ra m ( ) , V a r ia n t( O p e n D ia lo g 1 -> F ile N a m e ) , V a r ia n t::N o P a ra m ( ) ) ;

}

第 六 章 O L E 自 动 化 - 图57第 六 章 O L E 自 动 化 - 图58注 意 这 里 调 用 w b 的 方 法 时 用 小 圆 点 而 不 是 ->

6. 1 .2 通 过 调 用 Variant::E xec 来 操 纵 自 动 化 服 务 器

第 六 章 O L E 自 动 化 - 图59第 六 章 O L E 自 动 化 - 图60如 果 您 不 能 打 开 自 动 化 服 务 器 的 类 型 库 您 就 只 能 通 过 调 用 V a r ia n t::E x e c 来操 纵 自 动 化 服 务 器

第 六 章 O L E 自 动 化 - 图61第 六 章 O L E 自 动 化 - 图62第 六 章 O L E 自 动 化 - 图63首 先 您 要 创 建 一 个 V a r ia n t类 型 的 变 量 用 这 个 变 量 来 引 用 自 动 化 服 务 器

V a r ia n t w b = V a r ian t :: C re a teO b ject('W o rd . B as ic ') ;

第 六 章 O L E 自 动 化 - 图64第 六 章 O L E 自 动 化 - 图65然 后 调 用 V a r ia n t::E x e c 作 为 外 套 来 执 行 自 动 化 服 务 器 中 的 某 个 方 法 完 整 的示 例 如 下

v o id _ fa s tc a ll T F o rm 1 ::B u tto n 1 C lic k ( T O b je c t * S e n d e r )

{

V a r ia n t w b = V a r ia n t::C re a te O b je c t('W o rd .B a s ic ') ; if (O p e n D ia lo g 1 -> E x e c u te ( ))

w b .E x e c( P ro c ed u re(" F i le P r in t" ) < < N a m e d P aram (" F i le N a m e " , V a r ia n t( O p e n D ia lo g 1 -> F i le N a m e ) ) )

}

第 六 章 O L E 自 动 化 - 图66第 六 章 O L E 自 动 化 - 图67第 六 章 O L E 自 动 化 - 图68第 六 章 O L E 自 动 化 - 图69第 六 章 O L E 自 动 化 - 图70第 六 章 O L E 自 动 化 - 图71第 六 章 O L E 自 动 化 - 图72第 六 章 O L E 自 动 化 - 图73第 六 章 O L E 自 动 化 - 图74最 后 我 们 再 谈 一 谈 自 动 化 对 象 的 生 存 期 问 题 以 上 述 程 序 示 例 为 例 如 果 wb 变 量 被 声 明 为 全 局 的 那 么 这 个 自 动 化 对 象 的 生 存 期 就 与 应 用 程 序 的 生 存期 是 相 同 的 如 果 wb 变 量 在 某 个 例 程 内 部 声 明 该 自 动 化 对 象 的 生 存 期 与局 部 变 量 的 生 存 期 是 相 同 的 因 此 一 般 来 说 您 没 有 必 要 显 式 地 删 除 自动 化 对 象 的 实 例

  1. 1 .3 迟 后 联 编

第 六 章 O L E 自 动 化 - 图75第 六 章 O L E 自 动 化 - 图76第 六 章 O L E 自 动 化 - 图77第 六 章 O L E 自 动 化 - 图78第 六 章 O L E 自 动 化 - 图79从 本 质 上 讲 自 动 化 对 象 也 是 类 只 不 过 它 是 专 门 实 现 ID is p a tc h 接 口 的 类因 此 访 问 自 动 化 对 象 中 的 特 性 和 方 法 与 访 问 一 般 类 中 的 特 性 和 方 法 是 很相 似 的

第 六 章 O L E 自 动 化 - 图80第 六 章 O L E 自 动 化 - 图81第 六 章 O L E 自 动 化 - 图82第 六 章 O L E 自 动 化 - 图83第 六 章 O L E 自 动 化 - 图84第 六 章 O L E 自 动 化 - 图85第 六 章 O L E 自 动 化 - 图86第 六 章 O L E 自 动 化 - 图87第 六 章 O L E 自 动 化 - 图88第 六 章 O L E 自 动 化 - 图89不 同 的 是 访 问 OL E 自 动 化 对 象 的 特 性 和 方 法 采 用 的 是 迟 后 联 编 也就 是 说 不 需 要 事 先 声 明 特 性 和 方 法 的 原 型 编 译 器 也 不 进 行 类 型 检 查 至 于 特 性 和 方 法 能 不 能 访 问 成 功 要 到 运 行 期 实 际 访 问 后 才 知 道 如 果 实 际访 问 没 有 成 功 将 触 发 EO le E rro r异 常

第 六 章 O L E 自 动 化 - 图90造 成 访 问 失 败 的 原 因 可 能 有 这 么 几 种 情 况

  • 第 六 章 O L E 自 动 化 - 图91第 六 章 O L E 自 动 化 - 图92

    能 是 因 为 自 动 化 对 象 的 实 例 还 没 有 创 建 或 者 没 有 取 得 对 自 动 化 对 象的 引 用

  • 第 六 章 O L E 自 动 化 - 图93特 性

    或 方 法 的 标 识 符 在 自 动 化 对 象 中 不 存 在

  • 第 六 章 O L E 自 动 化 - 图94参 数

    的 个 数 及 数 据 类 型 不 匹 配 尽 管 有 的 自 动 化 对 象 支 持 参 数 可 省 略 的

第 六 章 O L E 自 动 化 - 图95第 六 章 O L E 自 动 化 - 图96调 用 但 没 有 遵 循 有 关 参 数 省 略 的 规 则 ( 后 面 将 详 细 介 绍 怎 样 省 略 参数 )

  • 第 六 章 O L E 自 动 化 - 图97第 六 章 O L E 自 动 化 - 图98

    法 调 用 出 现 在 表 达 式 中 但 该 方 法 并 没 有 返 回 一 个 值

  • 第 六 章 O L E 自 动 化 - 图99第 六 章 O L E 自 动 化 - 图100

    使 没 有 上 述 错 误 但 自 动 化 对 象 本 身 也 可 能 出 现 异 常

6.2 怎 样 创 建 自 动 化 服 务 器

第 六 章 O L E 自 动 化 - 图101第 六 章 O L E 自 动 化 - 图102第 六 章 O L E 自 动 化 - 图103第 六 章 O L E 自 动 化 - 图104第 六 章 O L E 自 动 化 - 图105第 六 章 O L E 自 动 化 - 图106第 六 章 O L E 自 动 化 - 图107自 动 化 服 务 器 分 为 三 类 一 是 In -P ro c e s s 型 的 服 务 器 二 是 O u t- O f-P ro c e s s ( 或称 为 Lo c a l) 型 的 服 务 器 三 是 R e m o te 型 的 服 务 器 不 管 是 哪 种 类 型 的 服 务 器其 基 本 特 征 是 一 致 的 都 要 实 现 ID is p a tc h 接 口 并 输 出 自 动 化 对 象

第 六 章 O L E 自 动 化 - 图108第 六 章 O L E 自 动 化 - 图109第 六 章 O L E 自 动 化 - 图110第 六 章 O L E 自 动 化 - 图111第 六 章 O L E 自 动 化 - 图112第 六 章 O L E 自 动 化 - 图113所 谓 In -P ro c e s s 服 务 器 一 般 是 动 态 链 接 库 (D L L ) 它 没 有 单 独 的 进 程 地 址 空间 而 是 直 接 映 射 到 客 户 程 序 的 进 程 地 址 空 间 中 运 行 创 建 这 一 类 服 务 器的 好 处 在 于 多 个 自 动 化 客 户 可 以 同 时 共 享 OL E 服 务 访 问 自 动 化 对 象 的 特性 和 方 法 是 直 接 的

第 六 章 O L E 自 动 化 - 图114第 六 章 O L E 自 动 化 - 图115第 六 章 O L E 自 动 化 - 图116第 六 章 O L E 自 动 化 - 图117第 六 章 O L E 自 动 化 - 图118第 六 章 O L E 自 动 化 - 图119所 谓 O u t- O f-P ro c e s s 服 务 器 一 般 是 可 单 独 执 行 的 应 用 程 序 (E X E ) 有 它 自己 的 进 程 地 址 空 间 而 自 动 化 客 户 运 行 在 另 一 个 进 程 地 址 空 间 W o rd 就 是一 个 典 型 的 O u t- O f-P ro c e s s 服 务 器 这 种 跨 进 程 通 信 的 能 力 是 由 ID is p a tc h 接口 提 供 的

第 六 章 O L E 自 动 化 - 图120第 六 章 O L E 自 动 化 - 图121第 六 章 O L E 自 动 化 - 图122第 六 章 O L E 自 动 化 - 图123第 六 章 O L E 自 动 化 - 图124所 谓 R e m o te 服 务 器 是 指 服 务 器 与 客 户 程 序 跨 越 了 机 器 边 界 限 于 目 前 的DC OM 版 本 R e m o te 服 务 器 必 须 是 可 执 行 程 序 不 过 将 来 也 可 能 是 动 态 链接 库

第 六 章 O L E 自 动 化 - 图125C+ + Bu ild e r 3 在 创 建 自 动 化 服 务 器 方 面 作 了 重 大 改 进 采 用 了 一 种 全 新 的 体

第 六 章 O L E 自 动 化 - 图126第 六 章 O L E 自 动 化 - 图127第 六 章 O L E 自 动 化 - 图128第 六 章 O L E 自 动 化 - 图129系 结 构 即 A c tiv e X 框 架 并 且 实 现 了 与 类 型 信 息 的 无 缝 连 接 您 将 会 发 现创 建 自 动 化 服 务 器 实 际 上 主 要 就 是 生 成 类 型 信 息

第 六 章 O L E 自 动 化 - 图130第 六 章 O L E 自 动 化 - 图131第 六 章 O L E 自 动 化 - 图132如 果 要 创 建 O u t- O f-P ro c e s s 型 的 自 动 化 服 务 器 首 先 要 使 用 F ile 菜 单 上 的

第 六 章 O L E 自 动 化 - 图133第 六 章 O L E 自 动 化 - 图134第 六 章 O L E 自 动 化 - 图135第 六 章 O L E 自 动 化 - 图136第 六 章 O L E 自 动 化 - 图137N e w A p p lic a tio n 命 令 开 始 一 个 新 的 项 目 因 为 O u t- O f- P ro c e s s 型 的 自 动化 服 务 器 是 EX E 然 后 再 创 建 一 个 自 动 化 对 象 加 到 自 动 化 服 务 器 中

第 六 章 O L E 自 动 化 - 图138第 六 章 O L E 自 动 化 - 图139第 六 章 O L E 自 动 化 - 图140第 六 章 O L E 自 动 化 - 图141第 六 章 O L E 自 动 化 - 图142第 六 章 O L E 自 动 化 - 图143第 六 章 O L E 自 动 化 - 图144第 六 章 O L E 自 动 化 - 图145第 六 章 O L E 自 动 化 - 图146第 六 章 O L E 自 动 化 - 图147第 六 章 O L E 自 动 化 - 图148第 六 章 O L E 自 动 化 - 图149第 六 章 O L E 自 动 化 - 图150第 六 章 O L E 自 动 化 - 图151第 六 章 O L E 自 动 化 - 图152第 六 章 O L E 自 动 化 - 图153第 六 章 O L E 自 动 化 - 图154第 六 章 O L E 自 动 化 - 图155要 创 建 一 个 自 动 化 对 象 使 用 F ile 菜 单 上 的 N e w 命 令 打 开 N e w I te m s 对 话 框 翻 到 A c tiv e X 页 双 击 A u to m a tio n O b je c t 图 标 C+ + Bu ild e r 3 将 打 开 A u to m a tio n O b je ct W izard 对 话 框 如 图 6 .2 所 示

第 六 章 O L E 自 动 化 - 图156

图 6 .2 创 建 自 动 化 对 象 的 向 导

第 六 章 O L E 自 动 化 - 图157第 六 章 O L E 自 动 化 - 图158第 六 章 O L E 自 动 化 - 图159第 六 章 O L E 自 动 化 - 图160第 六 章 O L E 自 动 化 - 图161第 六 章 O L E 自 动 化 - 图162第 六 章 O L E 自 动 化 - 图163第 六 章 O L E 自 动 化 - 图164第 六 章 O L E 自 动 化 - 图165第 六 章 O L E 自 动 化 - 图166第 六 章 O L E 自 动 化 - 图167在 C la ss N a m e 框 内 输 入 自 动 化 对 象 的 类 名 单 击 OK 按 钮 C+ + Bu ild e r 3将 自 动 创 建 该 自 动 化 对 象 的 类 型 库 文 件 名 是 P ro je c t1 .T L B 并 且 自 动 打 开 T y pe L ibra ry 编 辑 器 显 示 类 型 信 息 最 后 先 按 C tr l+ F 9 键 编 译 程 序 如

第 六 章 O L E 自 动 化 - 图168第 六 章 O L E 自 动 化 - 图169第 六 章 O L E 自 动 化 - 图170果 没 有 错 误 按 F9 键 运 行 程 序 此 服 务 器 将 自 动 在 W ind ow s 中 注 册

3 自 动 化 对 象 的 类 型 库

第 六 章 O L E 自 动 化 - 图171第 六 章 O L E 自 动 化 - 图172如 果 保 存 刚 刚 创 建 的 项 目 您 就 会 发 现 向 导 自 动 生 成 了 下 列 文 件

  • 第 六 章 O L E 自 动 化 - 图173类 型

    库 文 件 P ro je c t1 .T L B

  • 第 六 章 O L E 自 动 化 - 图174类 型

    库 的 接 口 描 述 文 件 P ro je c t1_T L B .C P P

  • 第 六 章 O L E 自 动 化 - 图175自 动

    化 对 象 中 接 口 的 实 现 单 元 文 件 U n it2 . P AS

第 六 章 O L E 自 动 化 - 图176第 六 章 O L E 自 动 化 - 图177第 六 章 O L E 自 动 化 - 图178第 六 章 O L E 自 动 化 - 图179第 六 章 O L E 自 动 化 - 图180第 六 章 O L E 自 动 化 - 图181第 六 章 O L E 自 动 化 - 图182第 六 章 O L E 自 动 化 - 图183第 六 章 O L E 自 动 化 - 图184第 六 章 O L E 自 动 化 - 图185向 导 自 动 生 成 类 型 库 文 件 P ro je c t1 .T L B 不 过 此 文 件 是 个 二 进 制 文 件 只 能用 T y p e L ib r a ry 编 辑 器 打 开 代 码 编 辑 器 能 打 开 的 是 类 型 库 的 接 口 描 述文 件 P ro je c t1_T L B .C P P 它 是 由 T y p e L ib r a r y 编 辑 器 维 护 的 您 不 要 直接 修 改 这 个 文 件

第 六 章 O L E 自 动 化 - 图186第 六 章 O L E 自 动 化 - 图187第 六 章 O L E 自 动 化 - 图188自 动 化 向 导 能 够 自 动 创 建 TX X H 对 象 的 类 型 信 息 不 过 刚 开 始 的 时 候

第 六 章 O L E 自 动 化 - 图189第 六 章 O L E 自 动 化 - 图190第 六 章 O L E 自 动 化 - 图191第 六 章 O L E 自 动 化 - 图192第 六 章 O L E 自 动 化 - 图193第 六 章 O L E 自 动 化 - 图194第 六 章 O L E 自 动 化 - 图195第 六 章 O L E 自 动 化 - 图196第 六 章 O L E 自 动 化 - 图197第 六 章 O L E 自 动 化 - 图198第 六 章 O L E 自 动 化 - 图199T XXH 对 象 的 接 口 是 空 的 要 使 客 户 程 序 能 够 操 纵 它 您 应 当 在 IX X H 接 口

中 加 入 新

的 成 员

使 用 V ie w

菜 单 上 的

Ty p e

L ib ra r y

命 令 打 开

T y p e

L ib ra r y

编 辑 器

如 图 6 .3 所 示

第 六 章 O L E 自 动 化 - 图200

第 六 章 O L E 自 动 化 - 图201第 六 章 O L E 自 动 化 - 图202图 6 .3 Ty pe L ibra ry 编 辑 器

第 六 章 O L E 自 动 化 - 图203第 六 章 O L E 自 动 化 - 图204第 六 章 O L E 自 动 化 - 图205第 六 章 O L E 自 动 化 - 图206第 六 章 O L E 自 动 化 - 图207要 向 接 口 中 增 加 新 的 成 员 在 T y p e L ib r a ry 编 辑 器 中 选 择 IXXH 节 点 然后 您 可 以 有 三 种 操 作 方 式

  • 第 六 章 O L E 自 动 化 - 图208第 六 章 O L E 自 动 化 - 图209第 六 章 O L E 自 动 化 - 图210第 六 章 O L E 自 动 化 - 图211第 六 章 O L E 自 动 化 - 图212第 六 章 O L E 自 动 化 - 图213第 六 章 O L E 自 动 化 - 图214

    单 击 工 具 栏 上 的 P rope r ty 或 M e thod 图 标 然 后 在 A ttrib u te s

第 六 章 O L E 自 动 化 - 图215页 修 改 成 员 的 属 性

第 六 章 O L E 自 动 化 - 图216第 六 章 O L E 自 动 化 - 图217第 六 章 O L E 自 动 化 - 图218第 六 章 O L E 自 动 化 - 图219二 是 在 IXXH 节 点 上 单 击 鼠 标 右 键 在 弹 出 的 菜 单 中 选 择 N e w 再 选 择

第 六 章 O L E 自 动 化 - 图220第 六 章 O L E 自 动 化 - 图221第 六 章 O L E 自 动 化 - 图222第 六 章 O L E 自 动 化 - 图223第 六 章 O L E 自 动 化 - 图224第 六 章 O L E 自 动 化 - 图225第 六 章 O L E 自 动 化 - 图226第 六 章 O L E 自 动 化 - 图227第 六 章 O L E 自 动 化 - 图228第 六 章 O L E 自 动 化 - 图229第 六 章 O L E 自 动 化 - 图230第 六 章 O L E 自 动 化 - 图231P rope r ty 或 M e thod 然 后 在 A ttrib u te s 页 修 改 成 员 的 属 性三 是 翻 到 Te x t 页 按 ID L 的 文 法 直 接 键 入 特 性 或 方 法 的 声 明

第 六 章 O L E 自 动 化 - 图232第 六 章 O L E 自 动 化 - 图233第 六 章 O L E 自 动 化 - 图234第 六 章 O L E 自 动 化 - 图235第 六 章 O L E 自 动 化 - 图236第 六 章 O L E 自 动 化 - 图237第 六 章 O L E 自 动 化 - 图238第 六 章 O L E 自 动 化 - 图239第 六 章 O L E 自 动 化 - 图240第 六 章 O L E 自 动 化 - 图241第 六 章 O L E 自 动 化 - 图242第 六 章 O L E 自 动 化 - 图243假 设 我 们 要 在 IXXH 接 口 中 增 加 一 个 M y C a p t io n 特 性 可 以 单 击 工 具 栏 上 的 P rope r ty 图 标 然 后 在 A ttrib u te s 页 的 N a m e 框 内 把 特 性 名 改 为 M y C a p tio n 把 数 据 类 型 改 为 W ide S tr ing 单 击 工 具 栏 上 的 R e f r e s h 按 钮

第 六 章 O L E 自 动 化 - 图244第 六 章 O L E 自 动 化 - 图245刷 新 类 型 库 新 加 入 的 特 性 就 自 动 加 到 类 型 库 的 描 述 文 件 中 您 可 以 在 IX X H

第 六 章 O L E 自 动 化 - 图246接 口 的 声 明 中 找 到 M y C a p t io n 特 性 的 声 明

in te r fa c e IXXH : p u b l ic ID is p a tc h

{

pub l ic :

v ir tu a l HR E S UL T S T DM E T HODC AL L T YP E g e t_ M y C a p t io n ( B S T R * V a lu e ) = 0 ; v ir tu a l HR E S UL T S T DM E T HODC AL L T YP E s e t_ M y C a p t io n ( B S T R V a lu e ) = 0 ;

}

第 六 章 O L E 自 动 化 - 图247第 六 章 O L E 自 动 化 - 图248接 下 来 您 可 以 打 开 IX X H 接 口 的 实 现 单 元 U n it2 的 头 文 件 找 到

第 六 章 O L E 自 动 化 - 图249G e t_ M y C a p tio n 和 S e t_ M y C a p tio n 的 声 明

c la s s AT L _ NO _ V T A B L E T XXH Im p l : AUT OOB J E C T _ IM P L ( T X XH Im p l , XXH , IXXH)

{

pro te c te d:

S T D M E T H O D ( g e t_M y C a p t ion( B S T R * V a lu e ) ) ; S T D M E T H O D ( s et_ M y C ap t io n ( B S T R V a lu e));

};

第 六 章 O L E 自 动 化 - 图250在 U n it2 中自动出 现下列 代码 ( 注释是笔 者加的 )

/ /-

S T DM E T HOD IM P T XXH Imp l::g e t_ M y C a p tio n ( B S T R * V a lu e )

{

tr y

{

第 六 章 O L E 自 动 化 - 图251// 在这里写 代码 用于读 M y C a p tio n 特性

}

catch ( E x c ep t io n & e )

{

re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IX X H ) ;

}

re tu rn S _ OK;

};

/ /-

S T DM E T HOD IM P T XXH Imp l::s e t_ M y C a p tio n ( B S T R V a lu e )

{

tr y

{

第 六 章 O L E 自 动 化 - 图252// 在 这 里 写 代 码 用 于 设 置 M y C a p tio n 特 性

}

catch ( E x c ep t io n & e )

{

re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IX X H ) ;

}

re tu rn S _ OK;

};

第 六 章 O L E 自 动 化 - 图253第 六 章 O L E 自 动 化 - 图254您 要 做 的 就 是 定 义 G e t_ M y C a p tio n 和 Se t_ M y C a p tio n 用 于 读 写 M y C a p t io n 特性

第 六 章 O L E 自 动 化 - 图255第 六 章 O L E 自 动 化 - 图256第 六 章 O L E 自 动 化 - 图257第 六 章 O L E 自 动 化 - 图258第 六 章 O L E 自 动 化 - 图259第 六 章 O L E 自 动 化 - 图260第 六 章 O L E 自 动 化 - 图261第 六 章 O L E 自 动 化 - 图262第 六 章 O L E 自 动 化 - 图263第 六 章 O L E 自 动 化 - 图264第 六 章 O L E 自 动 化 - 图265第 六 章 O L E 自 动 化 - 图266第 六 章 O L E 自 动 化 - 图267假 设 我 们 要 在 IXXH 接 口 中 增 加 一 个 M ove 函 数 单 击 工 具 栏 上 的 M e thod 按 钮 然 后 在 A ttrib u te s 页 的 N a me 框 内 把 函 数 名 改 为 M ove 单 击 工具 栏 上 的 R e fre s h 按 钮 刷 新 类 型 库 您 可 以 在 IX X H 接 口 的 声 明 中 找 到 M ove 函 数 的 声 明

in te r fa c e IXXH : p u b l ic ID is p a tc h

{

pub l ic :

v ir tu a l HR E S UL T S T DM E T HODC AL L T YP E M o v e ( v o id ) ;

};

第 六 章 O L E 自 动 化 - 图268第 六 章 O L E 自 动 化 - 图269第 六 章 O L E 自 动 化 - 图270接 着 您 可 以 打 开 IX X H 接 口 的 实 现 单 元 U n it2 的 头 文 件 找 到 M ove 函 数 的声 明

c la s s AT L _ NO _ V T A B L E T XXH Im p l : AUT OOB J E C T _ IM P L ( T X XH Im p l , XXH , IXXH)

{

pro te c te d:

S T DM E T HOD ( M o v e ( ) ) ;

};

第 六 章 O L E 自 动 化 - 图271在 U n it2 中 自 动 出 现 下 列 代 码 ( 注 释 是 笔 者 加 的 )

S T DM E T HOD IM P T XXH Imp l::M o v e ( )

{

tr y

{

第 六 章 O L E 自 动 化 - 图272// 在这里写 代码 用于定 义 M o v e 函数

}

catch ( E x c ep t io n & e )

{

re tu rn E rro r( e .M e s s a g e .c _ s tr( ), IID _ IX X H );

}

re tu rn S _ OK;

};

第 六 章 O L E 自 动 化 - 图273第 六 章 O L E 自 动 化 - 图274第 六 章 O L E 自 动 化 - 图275第 六 章 O L E 自 动 化 - 图276第 六 章 O L E 自 动 化 - 图277第 六 章 O L E 自 动 化 - 图278第 六 章 O L E 自 动 化 - 图279第 六 章 O L E 自 动 化 - 图280第 六 章 O L E 自 动 化 - 图281第 六 章 O L E 自 动 化 - 图282第 六 章 O L E 自 动 化 - 图283假 设 我 们 要 在 类 型 库 中 加 入 一 个 枚 举 类 型 D ra g M ode 单 击 工 具 栏 上 的 En u m 图 标 然 后 在 A ttrib u te s 页 的 N a m e 框 内 把 枚 举 类 型 名 称 改 为 D ra g M ode 注 意 GU ID 框 的 内 容 不 能 修 改 刚 开 始 的 时 候 D ra g M ode 中

第 六 章 O L E 自 动 化 - 图284第 六 章 O L E 自 动 化 - 图285第 六 章 O L E 自 动 化 - 图286第 六 章 O L E 自 动 化 - 图287第 六 章 O L E 自 动 化 - 图288还 没 有 定 义 枚 举 常 量 翻 到 Te x t 页 然 后 参 照 下 列 格 式 键 入 枚 举 常 量

ty pe de f e num ta gD ra gM o d e

{

[ h e lps tr ing(" d m M a nua l" ) ] dm M a nua l = 0 ,

[ h e lps tr ing(" d m A u to m a t ic " ) ] d m A u to m a tic = 1

} D rag M o d e ;

创 建 In -P ro ce ss 型 的 自 动 化 服 务 器

第 六 章 O L E 自 动 化 - 图289第 六 章 O L E 自 动 化 - 图290第 六 章 O L E 自 动 化 - 图291第 六 章 O L E 自 动 化 - 图292第 六 章 O L E 自 动 化 - 图293第 六 章 O L E 自 动 化 - 图294第 六 章 O L E 自 动 化 - 图295前面讲的 是怎样 创 建 O u t- O f-P ro c e s s 型的 自动化服 务器 现 在我们要 创建一 个 In - P ro c e s s 型 的 自 动 化 服 务 器 由 于 In -P ro c e s s 型 的 自 动 化 服 务 器 通 常 是 动 态 链 接 库 因 此 您 首先 要 创 建 一 个 A c tiv e X 项 目 ( 库 ) 然 后 把 自 动 化 对 象 加 到 这 个 项 目 中 操 作 步 骤 是 这 样的

第 六 章 O L E 自 动 化 - 图296第 六 章 O L E 自 动 化 - 图297第 六 章 O L E 自 动 化 - 图298第 六 章 O L E 自 动 化 - 图299第 六 章 O L E 自 动 化 - 图300第 六 章 O L E 自 动 化 - 图301第 六 章 O L E 自 动 化 - 图302第 六 章 O L E 自 动 化 - 图303第 六 章 O L E 自 动 化 - 图304第 六 章 O L E 自 动 化 - 图305第 六 章 O L E 自 动 化 - 图306第 六 章 O L E 自 动 化 - 图307第 六 章 O L E 自 动 化 - 图308使 用 F ile 菜 单 上 的 N e w 命 令 打 开 N e w I te m s 对 话 框 翻 到 A c tiv e X

双 击

A c tiv eX L ib rary

图 标

C+ + Bu i ld e r 3 将 建 立 一 个 A c tiv e X 项 目

第 六 章 O L E 自 动 化 - 图309

然 后

使 用

F ile 菜 单 上 的

N e w

命 令 再 次 打 开 N e w I te m s 对 话 框

第 六 章 O L E 自 动 化 - 图310第 六 章 O L E 自 动 化 - 图311第 六 章 O L E 自 动 化 - 图312第 六 章 O L E 自 动 化 - 图313第 六 章 O L E 自 动 化 - 图314第 六 章 O L E 自 动 化 - 图315第 六 章 O L E 自 动 化 - 图316第 六 章 O L E 自 动 化 - 图317第 六 章 O L E 自 动 化 - 图318第 六 章 O L E 自 动 化 - 图319第 六 章 O L E 自 动 化 - 图320第 六 章 O L E 自 动 化 - 图321第 六 章 O L E 自 动 化 - 图322第 六 章 O L E 自 动 化 - 图323第 六 章 O L E 自 动 化 - 图324第 六 章 O L E 自 动 化 - 图325第 六 章 O L E 自 动 化 - 图326第 六 章 O L E 自 动 化 - 图327第 六 章 O L E 自 动 化 - 图328第 六 章 O L E 自 动 化 - 图329第 六 章 O L E 自 动 化 - 图330第 六 章 O L E 自 动 化 - 图331到 A c tiv e X 页 双 击 A u to m a tio n O b je c t 图 标 打 开 A u to m a tio n O b je c t W iz a rd 对 话 框 在 C la ss N a m e 框 内 键 入 自 动 化 对 象 的 类 名 单 击 OK 按 钮 C+ + Bu ild e r 3 将 自 动 创 建 类 型 库 下 面 的 步 骤 与 创 建 O u t- O f- P ro c e ss 型 的 自 动 化 服 务 器 相 同 此 处 不 再 赘 述

注 册 和 调 试 自 动 化 对 象

第 六 章 O L E 自 动 化 - 图332第 六 章 O L E 自 动 化 - 图333对 于 O u t- o f-P ro c e s s 型 的 自 动 化 服 务 器 来 说 由 于 它 本 身 就 是 个 可 执 行 程 序

第 六 章 O L E 自 动 化 - 图334第 六 章 O L E 自 动 化 - 图335第 六 章 O L E 自 动 化 - 图336第 六 章 O L E 自 动 化 - 图337第 六 章 O L E 自 动 化 - 图338第 六 章 O L E 自 动 化 - 图339因 此 第 一 次 运 行 自 动 化 服 务 器 程 序 的 时 候 它 就 自 动 在 W ind ow s 中 注 册也 可 以 采 用 这 种 方 式 注 册 自 动 化 服 务 器 就 是 使 用 Ru n 菜 单 上 的

第 六 章 O L E 自 动 化 - 图340第 六 章 O L E 自 动 化 - 图341第 六 章 O L E 自 动 化 - 图342第 六 章 O L E 自 动 化 - 图343第 六 章 O L E 自 动 化 - 图344第 六 章 O L E 自 动 化 - 图345第 六 章 O L E 自 动 化 - 图346第 六 章 O L E 自 动 化 - 图347第 六 章 O L E 自 动 化 - 图348第 六 章 O L E 自 动 化 - 图349第 六 章 O L E 自 动 化 - 图350第 六 章 O L E 自 动 化 - 图351第 六 章 O L E 自 动 化 - 图352第 六 章 O L E 自 动 化 - 图353第 六 章 O L E 自 动 化 - 图354第 六 章 O L E 自 动 化 - 图355P a ra m e te rs 命 令 打 开 R u n P a ra m e te rs 对 话 框 在 R u n P a ra m e te rs 框 内 键 入 / reg s e rv er 如 果 要 取 消 自 动 化 服 务 器 的 注 册 在 R u n P a ra m e te rs 框 内 键 入 / unre g s e rv e r

第 六 章 O L E 自 动 化 - 图356第 六 章 O L E 自 动 化 - 图357第 六 章 O L E 自 动 化 - 图358第 六 章 O L E 自 动 化 - 图359第 六 章 O L E 自 动 化 - 图360第 六 章 O L E 自 动 化 - 图361第 六 章 O L E 自 动 化 - 图362第 六 章 O L E 自 动 化 - 图363第 六 章 O L E 自 动 化 - 图364第 六 章 O L E 自 动 化 - 图365第 六 章 O L E 自 动 化 - 图366第 六 章 O L E 自 动 化 - 图367第 六 章 O L E 自 动 化 - 图368第 六 章 O L E 自 动 化 - 图369对 于 In -P ro c e s s 型 的 自 动 化 服 务 器 来 说 由 于 它 没 法 单 独 运 行 要 注 册 In - P ro ces s 型 的 自 动 化 服 务 器 您 得 使 用 Ru n 菜 单 上 的 R e g is ter A c tiv eX Se rv e r 命 令 要 从 W ind ow s 中 取 消 自 动 化 服 务 器 的 注 册 使 用 Ru n 菜单 上 的 U n re g is te r A c t iv e X S e rv e r 命 令

第 六 章 O L E 自 动 化 - 图370第 六 章 O L E 自 动 化 - 图371第 六 章 O L E 自 动 化 - 图372第 六 章 O L E 自 动 化 - 图373第 六 章 O L E 自 动 化 - 图374第 六 章 O L E 自 动 化 - 图375第 六 章 O L E 自 动 化 - 图376第 六 章 O L E 自 动 化 - 图377第 六 章 O L E 自 动 化 - 图378第 六 章 O L E 自 动 化 - 图379要 调 试 O u t- O f-P ro c e ss 型 的 自 动 化 服 务 器 比 较 简 单 因 为 它 本 身 就 是 个 可 执行 程 序 您 只 要 事 先 在 源 程 序 中 设 好 断 点 然 后 启 动 自 动 化 服 务 器 程 序运 行 一 个 客 户 程 序 在 客 户 程 序 中 访 问 自 动 化 对 象 的 特 性 和 方 法 如 果 遇到 断 点 C+ + Bu ild e r 3 的 调 试 器 就 接 管 对 服 务 器 程 序 的 控 件 权 这 样 您 就 可以 采 用 诸 如 单 步 跟 踪 等 手 段 调 试 它 了

第 六 章 O L E 自 动 化 - 图380第 六 章 O L E 自 动 化 - 图381第 六 章 O L E 自 动 化 - 图382第 六 章 O L E 自 动 化 - 图383第 六 章 O L E 自 动 化 - 图384第 六 章 O L E 自 动 化 - 图385第 六 章 O L E 自 动 化 - 图386第 六 章 O L E 自 动 化 - 图387第 六 章 O L E 自 动 化 - 图388第 六 章 O L E 自 动 化 - 图389第 六 章 O L E 自 动 化 - 图390第 六 章 O L E 自 动 化 - 图391要 调 试 In -P ro c e s s 型 的 自 动 化 服 务 器 (D L L 或 OC X) 首 先 要 使 用 Ru n 菜 单上 的 P a ra m e te rs 命 令 打 开 R u n P a ra m e te rs 对 话 框 在 H o s t A p p lic a tio n 框 内 指 定 一 个 宿 主 程 序 ( 实 际 上 就 是 前 面 所 说 的 客 户 程 序 ) 再 用 这 个 宿 主 程序 访 问 自 动 化 对 象