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