C O le D ispatchDriver

COleDispatchDriver 没 有 基 类 。

COleDispatchDriver 类 实 现 OLE 自 动 化 中 的 客 户 方 。 OLE 调 度 接 口 为 访 问 一 个对 象 的 方 法 和 属 性 提 供 了 途 径 。 COleDispatchDriver 的 成 员 函 数 连 接 , 分 离 , 创 建 和 释 放 一 个 ID ispatch 类 型 的 调 度 连 接 。 其 它 的 成 员 函 数 使 用 变 量 参 数 列 表来 简 化 调 用 IDispatch::Invoke。

要 获 得 更 多 的 信 息 , 参 见 “ W in32 SDK OLE 程 序 员 参 考 ” 中 的 IDispatch 和

ID ispatch::Inv - oke 。

这 个 类 可 以 直 接 使 用 , 但 一 般 来 说 , 它 只 是 由 用 ClassWizard 创 建 的 类 使 用 。

当 你 通 过 引 用 一 个 类 型 库 来 创 建 一 个 新 的 C++ 类 时 , ClassWizard 从

COleDispatchDriver 派 生 出 新 类 。

有 关 使 用 COleDispatchDriver 的 更 多 信 息 , 参 见 下 面 列 出 的 “ V isual C++ 程 序员 指 南 ” 一 书 中 的 文 章 :

  • 自 动 化 客 户

  • 自 动 化 服 务 器

  • ClassWizard :自 动 化 支 持

# include <afxdisp.h>

请 参 阅 CCmdTarget

Data M embers

m _bAutoRelease 在 执 行 ReleaseDispatch 或 析 构 对 象 时 , 指 定 是 否

要 释 放 Idispatch

m_lpDispatch 表 示 指 向 附 着 在 这 个 ColeDispatchDriver 的

ID ispatch 接 口 的 指 针

Construction

ColeDispatchDriver 构 造 一 个 COleDispatchDriver 对 象

Operations

CreateDispatch 创 建 一 个 IDispatch 连 接 并 将 它 附 着 于

COleDispatchDriver 对 象

AttachDispatch 将 一 个 ID ispatch 连 接 附 着 于 ColeDispatchDriver 对

DetachDispatch 分 开 一 个 IDispatch 连 接 , 但 并 不 释 放 它

ReleaseDispatch 释 放 一 个 IDispatch 连接

InvokeHelper 用 于 调 用 自 动 化 方 法 的 助 手

SetProperty 设 置 一 个 自 动 化 特 性

GetPrope rty 获 得 一 个 自 动 化 特 性

CO leDispatchDriver::AttachDispatch

void A ttachDispatch( LPDISPATCH lpDispatch ,BOOL bA u toRelease = TRUE);

参 数

lpDispatch

被 附 着 于 COleDispatchDriver 对 象 的 指 向 一 个 OLE IDispatch 对 象 的 指 针 。

bAutoRelease

表 明 当 对 象 超 出 范 围 时 , 是 否 要 释 放 dispatch 。

说 明

调 用 AttachDispatch 成 员 函 数 可 以 将 一 个 ID ispatch 指 针 附 着 于

COleDispatchDriver 对 象 上 。 这 个 函 数 释 放 任 何 已 经 附 着 于 COleDispatchDriver

对 象 的 ID ispatch 指 针 。

请 参 阅 COleDispatchDriver::DetachDispatch ,

COleDispatchDriver::ReleaseDispatch ,

COleDispatchDriver::CreateDispatch ,

COleDispatchDriver::m_lpDispatch , COleDispatchDriverD::m_bAutoRelease

CO leDispatchDriver:: COleDispatchDriver

COleDispatchDriver();

COleDispatchDriver(LPDISPATCH lpDispatch ,BOOL bAutoRelease = TRUE); COleDispatchDriver(const COleDispatchDriver& dispatchSrc );

参 数

lpDispatch

指 向 一 个 被 附 着 于 COleDispatchDriver 对 象 的 OLE IDispatch 对 象 的 指 针 。

bAboutRelease

当 对 象 超 出 范 围 时 , 表 明 是 否 要 释 放 这 个 dispatch 。

dispatchSrc

对 一 个 已 存 在 的 COleDispatchDriver 对 象 的 引 用 。

说 明

构 造 一 个 COleDispatchDriver 对 象 。 COleDispatchDriver(LPDISPATCH

lpDispatch ,BOOL bAutoRelease = TRUE ) 连 接 IDispatch 接 口 。

COleDispatchDriver(const COleDispatchDriver& dispatchSrc ) 拷 贝 一 个 已 存 在 的

ColeDispat - chDriver 对 象 , 并 增 加 引 用 计 数 。

COleDispatchDriver( ) 创 建 一 个 COleDispatchDriver 对 象 , 但 不 连 接 ID ispatch 接口 。 在 使 用 一 个 没 有 参 数 的 COleDispatchDriver( ) 之 前 , 应 该 用COleDispatchDriver::CreateDispatch 或 者 COleDispatchDriver::AttachDispatch 为它 连 接 一 个 IDispatch 。

请 参 阅 COleDispatchDriver::AttachDispatch ,

COleDispatchDriver::CreateDispatch

CO leDispatchDriver::CreateDispatch

BOOL CreateDispatch(REFCLSID clsid ,COleException* pError = NULL); BOOL CreateDispatch(LPCTSTR lpszProgID ,COleException* pError = NULL ) ;

返 回 值

成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

clsid

要 创 建 的 IDispatch 连 接 对 象 的 类 ID 。

pError

指 向 一 个 OLE 异 常 对 象 的 指 针 , 这 个 异 常 对 象 将 保 存 在 创 建 中 产 生 的 状态 码 。

lpszProgID

指 向 一 个 自 动 化 对 象 的 标 识 符 的 指 针 , 如 “ Excel.Document.5 ” 。 将 要 创建 的 调 度 对 象 是 为 这 个 自 动 化 对 象 创 建 的 。

说 明

创 建 一 个 IDispatch 对 象 并 将 它 与 COleDispatchDriver 对 象 连 接 。

请 参 阅 COleDispatchDriver::DetachDispatch ,

COleDispatchDriver::AttachDispatch , COleException ,

COleDispatchDriver::m_ lpDispatch

CO leDispatchDriver::DetachDispatch

LPDISPATCH DetachDispatch();

返 回 值

一 个 指 向 以 前 连 接 的 IDispatch 对 象 的 指 针 。

说 明

将 当 前 的 IDispatch 连 接 从 对 象 上 分 离 。 但 不 释 放 这 个 IDispatch 。

有 关 LPDISPATCH 类 型 的 更 多 的 信 息 ,参 见“ OLE 程 序 员 参 考 ”中 的 IDispatch 。

COleDispatchDriver::Creat e Dispatch ,

COleDispatchDriver::AttachDispatch ,

COleDispatchDriver::m_lpDispatch

CO leDispatchDriver::GetProperty

void GetProperty(DISPID dwDispID ,VARTYPE vtProp ,void* pvProp ) const;

参 数

dwDispID

标 识 需 要 获 得 的 属 性 。 这 个 值 通 常 由 ClassWizard 提 供 。

vtProp

指 定 要 获 取 的 属 性 。 可 能 的 取 值 可 以 参 见

COleDispatchDriver::InvokeHelper 的 说 明 部 分 。

pvProp

用 来 接 收 属 性 值 的 变 量 的 地 址 。 它 必 须 与 vtProp 所 指 定 的 类 型 相 匹 配 。

说 明

获 取 由 dwDispID 指 定 的 对 象 属 性 。

请 参 阅 COleDispatchDriver::InvokeHelper, COleDispatchDriver::SetProperty

CO leDispatchDriver::InvokeHelper

void InvokeHelper(DISPID dwDispID ,W O R D wFlag s,VARTYPE vtRe t,void*

pvRet ,

const BYTE FAR* pbParamInfo ,...); throw(COleException); throw(COleDispatchException);

参 数

dwDispID

标 识 要 激 活 的 方 法 或 者 属 性 。 这 个 值 常 常 由 ClassWizard 提 供 。

wFlag

描 述 调 用 IDispatch::Invoke 的 前 后 关 系 的 标 志 。 其 可 能 的 取 值 参 见 Platform

SDK 。

vtRet

指 定 返 回 值 的 类 型 。 其 可 能 的 取 值 参 见 说 明 部 分 。

pvRet

是 将 用 来 接 收 属 性 值 或 返 回 值 的 变 量 的 地 址 。 它 必 须 与 vtRet 所 指 定 的 类型 相 匹 配 。

pbParamInfo

是 一 个 指 向 用 空 字 符 结 尾 的 字 符 串 的 指 针 , 这 个 字 符 串 有 多 个 字 节 用 来

指 定 紧 跟 pbParamInfo 之 后 的 参 数 的 类 型 。

...

参 数 变 量 列 表 , 这 些 参 数 的 类 型 在 pbParamInfo 中 指 定 。

说 明

在 由 wFlags 指 定 的 前 后 关 系 中 调 用 由 dwDispID 指 定 的 方 法 或 属 性 。 参 数pbParamInfo 指 定 要 传 递 给 方 法 或 属 性 的 参 数 的 类 型 。 在 语 法 说 明 中 ... 所 代 表 的就 是 参 数 的 变 量 列 表 。

vtRet 参 数 可 能 的 取 值 来 自 于 VARENUM 枚 举 。可 能 的 取 值 如 下 所 示 :

符 号 返 回 类 型

VT_EMPTY V oid

VT_I2 S hort

VT_I4 L ong

VT_R4 F loat

VT_R8 D ouble

VT_CY CY

VT_DATE DATE

VT_BSTR BSTR

VT_DISPATCH LPDISPATCH

VT_ERROR SCODE

VT_BOOL BOOL

VT_VARIANT VARIANT

V T _ U N K N O W N LPUNKNOWN

参 数 pbParam Info 是 一 个 由 空 格 分 隔 的 有 关 VTS_ 常 量 的 列 表 。 这 些 值 中 的 许多 是 由 空 格 来 分 隔 的 ( 而 不 是 逗 号 ) , 它 们 指 明 了 函 数 的 参 数 列 表 。 可 能 的 取值 由 宏 EV E NT_CUSTOM 列 表 给 出 。

此 函 数 将 参 数 转 换 为 V A R IANTARG 值 , 然 后 激 活 IDispatch::Invoke 方 法 。 如果 对 Invoke 的 调 用 失 败 , 这 个 函 数 将 抛 出 一 个 异 常 。 如 果 由 IDispatch::Invoke 返 回 的 SCODE ( 状 态 码 ) 是 D ISP_E_EXCEPTION , 此 函 数 抛 出 一 个COleException 对 象 ; 否 则 它 抛 出 一 个 COleDispatchException 。

更 多 的 信 息 请 参 见 “ Platform SDK ” 中 的 V A R IANTARG , IDispatch ,

ID ispatch::Invoke, 以 及 COM 错 误 代 码 的 结 构 。

请 参 阅 COleException , COleDispatchException

CO leDispatchDriver::ReleaseDispatch

void ReleaseDispatch();

说 明

释 放 ID ispatch 连 接 。 如 果 这 个 连 接 已 经 设 置 为 自 动 释 放 , 则 在 释 放 这 个 接 口 之

前 , 此 函 数 将 调 用 Dispatch::Release 。

请 参 阅 COleDispatchDriver::DetachDispatch ,

COleDispatchDriver::Creat e Dispatch ,

COleDispatchDriver::AttachDispatch ,

COleDispatchDriver::m_lpDispatch , COleDispatchDriver::m_bAutoRelease

CO leDispatchDriver::SetProperty

void SetProperty(DISPID dwDispID ,VARTYPE vtProp ,...);

参 数

dwDispID

标 识 要 设 置 的 属 性 。 这 个 值 常 常 由 ClassWizard 提 供 。

vtProp

指 明 要 设 置 的 属 性 的 类 型 。 可 能 的 取 值 参 见

COleDispatchDriver::InvokeHelper 中 的 说 明 部 分 。

...

由 vtProp 指 明 类 型 的 单 一 参 数 。

说 明

设 置 由 dwDispID 指 定 的 OLE 对 象 属 性 。

请 参 阅 COleDispatchDriver::InvokeHelpe r, COleDispatchDriver::GetProperty

数 据 成 员

CO leDispatchDriver::m_bAutoRelease

说 明

如 果 为 TRUE , 则 当 调 用 ReleaseDispatch 或 COleDispatchDriver 对 象 被 销 毁 时 , 由 m_lpDispatch 访 问 的 COM 对 象 将 被 自 动 释 放 。

缺 省 的 , 在 构 造 函 数 中 m_bAutoRelease 被 设 置 为 TRUE 。

有 关 释 放 COM 对 象 的 更 多 信 息 , 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 “ 实现 引 用 计 数 和 IUnknown::Release 。 ”

请 参 阅 COleDispatchDriver::AttachDispatch ,

COleDispatchDriver::ReleaseDispatch , COleDispatchDriver::m_lpDispatch

CO leDispatchDriver::m_lpDispatch

说 明

这 是 指 向 连 接 着 COleDispatchDriver 的 ID ispatch 接 口 的 指 针 。 m_lpDispatch 数据 成 员 是 一 个 类 型 为 LPDISPATCH 的 公 用 变 量 。

更 多 的 信 息 可 以 参 见 “ OLE 程 序 员 参 考 ” 中 的 IDispatch 。

请 参 阅 COleDispatchDriver::AttachDispatch ,

COleDispatchDriver::ReleaseDispatch ,

COleDispatchDriver::Crea te Dispatch ,

COleDispatchDriver::DetachDispatch