第 三 章 A c tiv e X 框 架
Bo r la n d ® 公 司 在 面 向 对 象 领 域 一 直 处 于 世 界 领 先 地 位 A c tiv e X 框 架 就 是 他的 又 一 杰 作 A c tiv e X 框 架 中 封 装 了 许 多 CO M 和 A c tiv e X 的 接 口 和 函 数 使开 发 基 于 CO M 和 A c tiv e X 的 应 用 变 得 非 常 简 单 不 仅 如 此 A c tiv e X 框 架 还允 许 过 去 基 于 T W in C on tro l的 控 件 转 换 成 为 A c tiv e X 控 件 从 而 使 大 量 的 基 于VC L 的 控 件 可 以 应 用 到 其 它 开 发 环 境 如 M ic ros oft的 V isu a l B a sic 4 . 0 和 5 .0
V is u a l C + + 4 . x In te rn e t E xp lore r 3 .0 和 4 .0 A c tiv e X C o n tro l P a d F ron tP a ge 98
以 及 Bo r la n d 的 D e lphi 3 In traB u i ld er P a ra dox 8 等
1 什 么 是 Ac ti ve X 框 架
A c tiv e X 框 架 实 际 上 是 一 组 有 继 承 关 系 的 类 的 统 称 这 些 类 分 别 用 于 实 现 简单 的 CO M 对 象 带 类 型 信 息 描 述 的 CO M 对 象 OL E 自 动 化 服 务 器 A c tiv e X 控 件 A c tiv e F o rm 以 及 特 性 页 等 这 些 类 及 其 继 承 关 系 如 下
TC o m O b je c t // 简 单 的 CO M 对 象
T T y p ed C o m O b ject // 带 类 型 信 息 描 述 的 CO M 对 象
T A u toO b je c t // O L E 自 动 化 服 务 器 的 基 类
T A ctiv eX C o n tro l // 任 何 一 个 A c tiv e X 控 件 的 直 接 上 级
T C o m S e rv er O b ject // T C o m S erv e r的 虚 拟 基 类
T C o m S e rv e r //C O M 服 务 器 的 基 类
T C u s to m F o rm //T F o rm T A c tiv e F o rm 的 共 同 基 类
T A ctiv eF o rm // 复 合 的 A c tiv e X 控 件
T C us to m F orm // 特 性 页 实 际 上 也 是 Fo rm T P rope r ty P a g e // 特 性 页 的 基 类
T C o m O b je c t F acto r y // 用 于 注 册 简 单 的 CO M 对 象
T A ctiv eX P ro p e r tyP ag eF acto r y //用 于 注 册 A c tiv e X 控 件 的 特 性 页
T T y p ed C o m O b jectF a c to r y // 用 于 注 册 带 类 型 信 息 描 述 的 CO M 对 象
T A u toO b jc e t F a c tor y // 用 于 注 册 OL E 自 动 化 服 务 器
T A ctiv eX C o n tro l F acto ry // 用 于 注 册 A c tiv e X 控 件
T a c t iv eF o rm F ac to r y // 用 于 注 册 A c tiv e F o rm
- 2 TI nt er fac ed Ob je ct
T In te r fa c e dO b je c t是 这 样 声 明 的
cla s s D E L P H IC L A S S T In terfaced O b je c t : T O b je c t
{
priv a te :
vo id * IU n k n ow n; in t F R e f C oun t;
pro te c te d:
v ir tu a l H R e su lt _s td c a l l Q u e ry In te r fa c e ( c ons t G U ID & I ID , vo id * O bj); v ir tu a l in t _s td c a l l _A dd R e f ( v o id);
v ir tu a l in t _ s td c a ll _ R e le a se ( v o id ) ; pub l ic :
_p rop e r ty in t R e f C oun t;
};
可 以 看 出 T In te r faced O b ject 是 直 接 从 T O b ject 继 承 下 来 的 用 于 实 现IU nknow n 接 口 我 们 知 道 IU nkno w n 接 口 是 C+ + Bu ild e r 3 中 所 有 接 口 的 默认 祖 先 接 口 因 此 T In te r faced O b ject往 往 用 于 作 为 接 口 对 象 的 基 类
T In te r fa c e dO b je c t没 有 也 不 需 要 类 工 厂 因 此 那 些 从 T In te r faced O b ject继 承下 来 的 接 口 对 象 应 当 调 用 自 己 的 构 造 函 数 来 创 建 接 口 对 象 的 实 例
根 据 类 型 相 容 的 规 则 从 T In te r faced O b ject继 承 下 来 的 派 生 类 的 实 例 可 以 赋值 给 T In te r fa c e dO b je c t的 变 量 但 赋 值 并 不 总 是 成 功 的
- 3 TC om Ob jec t
TC o m O b je c t是 C+ + Bu ild e r 3 中 非 常 重 要 的 一 个 类 通 常 用 于 作 为 简 单 的 CO M
对 象 的 基 类 T C o m O b ject同 时 支 持 IU nknow n 接 口 和 IS upport E r ror In fo 接 口
TC o m O b je c t在 Co m O b j单 元 中 是 这 样 声 明 的
c la s s P A S C A L IM P L E M EN TA T IO N TC o m O b je c t : p u b l ic S y s te m : : TO b je c t
{
ty p e d e f S y s te m ::T O b je c t in h e rite d ; priv a te :
v o id *_ IU nk n o w n ;
v o id * _ IS u p p o rt E r ro rIn fo ; pub l ic :
_ fa s tc a ll T C o m O b je c t( v o id ) ;
_ fa s tc a ll T C o m O b je c t( c o n s t _ d i_ IU n k n o w n C o n tro lle r ) ;
_fa s tc a l l T C om O b je c t( T C o m O b je c t F a c tory * F a c to ry , c ons t _d i_IU n k now n C o n tro l le r ) ;
_ fa s tc a ll v ir tu a l ~ T C o m O b je c t( v o id ) ; v ir tu a l v o id _ fa s tc a ll In itia liz e ( v o id ) ; v ir tu a l in t _ s td c a ll O b j A d d R e f ( v o id ) ;
v ir tu a l H R E S U L T _ s td call O b j Q u e ry In te r face( co ns t G U ID & I ID , v o id * O bj); v ir tu a l in t _ s td c a ll O b j R e le a se ( v o id ) ;
v ir tu a l H R E S U L T _ fa s tc a l l S a fe C a llE x c e p tio n ( S y s te m ::T O b je c t* E x c e p tO b je c t, v o id * E x c e p t A d d r);
_p rop e r ty _d i_ IU n k now n C on tro l le r ;
_p rop e r ty T C om O b je c t F a c tory * F a c tory ;
_p rop e r ty in t R e f C ount = { re a d = F R e f C o un t, n o d e fa u lt} ;
};
TC o m O b je c t有 三 个 构 造 函 数 这 意 味 着 它 可 以 有 三 种 创 建 方 式
|
用 于 把 它 实 例 化 成 一 个 简 单 的 CO M 对 象 |
||
---|---|---|---|
|
用 于 把 它 实 例 化 成 聚 合 的 一 部 分 |
||
|
用 于 把 它 实 例 化 成 一 个 简 单 的 CO M 对 象 |
在 |
创 |
建 实 例 的 同 时 还 对 实 例 进 行 初 始 化
TC o m O b je c t同 时 支 持 IU nknow n 接 口 和 IS upport E r ro r Info 接 口 这 就 是 所 谓 的接 口 聚 合 这 样 一 个 OL E 自 动 化 客 户 程 序 就 可 以 查 询 到 错 误 信 息
并 且 保 证 错 误 信 息 能 沿 着 调 用 链 逐 级 传 播 通 过 实 现 IS upport E r ror In fo 接 口中 的 In te r faceS upports E r ro r In fo 方 法 TC o m O b je c t 支 持 IE rro r In fo 策 略 因 而也 支 持 OL E 异 常 处 理 和 Sa fe C a ll调 用 约 定
C o n tro lle r 特 性
声 明 _prope r ty _d i_ IU nknow n C on tro lle r ;
这 个 特 性 用 于 在 一 个 聚 合 的 对 象 内 返 回 IU nkno w n 接 口 如 果 返 回 NUL L 表示 对 象 不 是 聚 合 的 一 部 分
Fa c to r y 特 性
声 明 _prope r ty T C o m O b je c t F a c tor y * F a c tor y ;
这 个 特 性 返 回 CO M 对 象 的 类 工 厂 类 工 厂 用 于 创 建 T C o m O b ject的 实 例
R e f C o unt
声 明 _prope r ty in t R e f C oun t;
这 个 特 性 返 回 CO M 对 象 的 引 用 计 数 它 是 由 IU nknow n 接 口 的 A d d R e f 和
R e le a s e 自 动 维 护 的
I n itia liz e 函 数
声 明 v ir tua l vo id _fa s tc a ll In itia liz e ( vo id);
CO M 对 象 可 以 重 载 这 个 虚 拟 方 法 对 实 例 进 行 初 始 化 注 意 调 用 构 造 函数 时 已 经 对 实 例 进 行 了 默 认 的 初 始 化 因 此 In itia liz e 不 要 重 复 这 些 初 始 化的 内 容
O b j A dd R e f 函 数
声 明 v ir tua l in t _s td c a l l O b j A ddR e f ( vo id);
这 个 函 数 是 从 IU nkno w n 接 口 中 的 _A ddR e f 映 射 过 来 的 用 于 重 新 实 现
_A ddR e f
O b j R e le a s e 函 数
声 明 v ir tua l in t _s td c a l l O b j R e le a s e ( vo id);
这 个 函 数 是 从 IU nkno w n 接 口 中 的 _R e le a s e 映 射 过 来 的 用 于 重 新 实 现
_R e le a s e
O b j Q u e r y I n ter fa c e 函 数
声 明 v ir tua l H R E S U L T _s td c a l l O b j Q ue ry In te r fa c e ( c ons t G U ID & I ID , vo id
*O b j) ;
这 个 函 数 是 从 IU nkno w n 接 口 中 的 Q u ery In terfa c e 映 射 过 来 的 用 于 重 新 实 现Q u eryIn terface Q u eryIn terface 函 数 用 于 判 断 CO M 对 象 是 否 支 持 IID 参 数 指 定的 接 口 如 果 CO M 对 象 不 是 聚 合 的 一 部 分 就 用 O b j Q u e ry In te r fa c e 来 实 现IU nknow n 的 Q u ery In te r - face
3 . 4 TT yp ed Com Ob je ct
T T y p ed C o m O b ject是 从 TC o m O b je c t继 承 下 来 的 支 持 IP rov ide C la s s Info 接 口在 Co m O b j单 元 中 T T yp ed C o m O b jec t是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T T y p e d C o m O b je c t : p u b lic C o m o b j::T C o m O b je c t
{
ty p e d e f C o m o b j::T C o m O b je c t in h e rite d ; priv a te :
v o id *_ IP ro v id e C la s s In fo; pub l ic :
ope ra to r IP ro v ide C la s s In fo * ( v o id)
{ re tu rn ( IP rov id e C la s s In fo * )& _IP rov ide C la ss In fo; } pub l ic :
_fa s tc a l l T T y pe dC o m O b je c t( vo id) : C o m o b j : : T C o m O b je c t( ) { }
_ fa s tc a ll T T y p e d C o m O b je c t( c o n s t _ d i_ IU n k n o w n C o n tro lle r ) : C o m o b j :: T C o m O b je c t( C o n tro l le r ) { }
_fa s tc a l l T T y pe dC o m O b je c t( T C o m O b je c t F a c tory * F a c tory , c ons t _d i_IU n k n ow n C o n tro lle r ) : C o m o b j::T C o m O b je c t( F a c to ry , C o n tro lle r ) { }
_fa s tc a l l v ir tua l ~ T T y pe d C om O b je c t( v o id) { }
};
T T y p ed C o m O b ject 最 大 的 特 点 是 支 持 IP rov ide C la s s Info 接 口 可 以 直 接 读 取类 型 信 息 而 不 需 要 事 先 调 入 类 型 库 正 是 由 于 这 个 特 点 凡 是 以T T y p ed C o m O b ject为 基 类 的 CO M 对 象 必 须 在 类 型 库 中 提 供 类 型 信 息 描 述
3 . 5 TA ut oO bje ct
T A u toO b je c t用 于 作 为 OL E 自 动 化 服 务 器 的 基 类 同 时 由 于 A c tiv e X 本 质 上也 是 基 于 OL E 自 动 化 因 此 T A u toO b je c t也 是 T A ctiv eX C o n tro l的 祖 先 类
在 Co m O b j单 元 中 T A u toO b je c t是 这 样 声 明 的
c la s s P A S C A L IM P L E M EN TA T IO N TA u to O b je c t : p u b l ic C o m o b j : : TTy p e d C o m O b je c t
{
ty pe de f C o m o b j : : T T y pe d C om O b je c t in h e r i te d; priv a te :
vo id * _ ID ispa tc h;
pub l ic :
_fa s tc a l l T A u toO b je c t( v o id) : C o m o b j : : T T y pe dC o m O b je c t( ) { }
_ fa s tc a ll T A u to O b je c t( c o n s t _ d i_ IU n k n o w n C o n tro lle r ) : C o m o b j:: T T y p e d C o m O b je c t( C o n tro lle r ) { }
_fa s tc a l l T A u toO b je c t( T C o m O b je c t F a c tory * F a c tory , c ons t _ d i_ IU n k n o w n C o n tro l le r ) : C o m o b j : : T T y pe dC om O b je c t( F a c tory , C o n tro l le r ) { }
_ fa s tc a ll v ir tu a l ~ T A u to O b je c t( v o id ) { }
};
可 以 看 出 T A u toO b je c t 是 从 T T y p ed C o m O b ject 继 承 下 来 的 支 持 ID is p a tc h 接 口 T A u toO b je c t 还 提 供 了 自 动 的 M a rs ha ling 功 能 凡 是 用 T A u toO b je c t 作为 基 类 所 建 立 的 CO M 对 象 可 以 跨 进 程 边 界 传 递 函 数 调 用 如 果 不 用T A u toO b je c t作 基 类 的 话 CO M 对 象 就 要 自 己 实 现 M a rs h a lin g 功 能 先 要 打包 到 达 目 的 地 后 再 解 包
T A u toO b je c t 的 对 象 需 要 建 立 类 型 库 因 为 它 支 持 双 重 接 口 同 时 由 于T A u toO b je c t间 接 地 继 承 了 IP rov ide C la s s Info 接 口 也 需 要 类 型 库 T A u toO b je c t 有 相 应 的 类 工 厂 T A u to O b jectF acto r y 如 果 要 创 建 的 OL E 自 动 化 对 象 是 内 部使 用 的 就 不 需 要 类 工 厂 此 时 应 当 选 T A u toIn tf O b je c t为 基 类
3 . 6 TA ut oI ntf Ob je ct
有 的 OL E 自 动 化 对 象 仅 仅 是 内 部 使 用 的 这 种 自 动 化 对 象 不 在 W ind ow s 的 注
册 表 中 注 册 也 就 是 说 它 不 需 要 类 工 厂 这 时 候 自 动 化 对 象 应 当 以
T A u toIn tf O b je c t为 基 类
T A u toIn tf O b je c t 是 从 T In te r faced O b ject 继 承 下 来 的 支 持 ID is p a tc h 接 口 和
Is upport E rr-o rIn fo 接 口 在 Co m O b j单 元 中 T A u toIn tf O b je c t是 这 样 声 明 的
clas s P A S C A L IM P L E M E N T A T IO N T A u to In tf O b ject : p u b l ic S y s te m : : T In te r fac ed O b je ct
{
ty p e d e f S y s te m ::T In te r fa c e d O b je c t in h e rite d ; priv a te :
vo id * _ ID ispa tc h;
v o id * _ IS u p p o rt E r ro rIn fo ; pub l ic :
_fa s tc a l l T A u toIn tf O b je c t( c o n s t _d i_ IT y p e L ib T y pe L ib , c ons t G U ID & D is pIn tf ) ;
v ir tu a l H R E S U L T _ fa s tc a l l S a fe C a llE x c e p tio n ( S y s te m ::T O b je c t* E x c e p tO b je c t, v o id * E x c e p t A d d r);
_ p ro p e r ty S y s te m : : P In te r faceE n try D is p In tf E n try ;
_p rop e r ty _d i_ IT y pe In fo D isp T y pe In fo ;
_ p ro p e r ty GU ID D is p I ID ; pub l ic :
_ fa s tc a ll v ir tu a l ~ T A u to In tf O b je c t(v o id ) { }
};
可 以 看 出 T A u toIn tf O b je c t 与 T A u toO b je c t 具 有 相 似 性 它 们 都 直 接 或 间 接地 支 持 ID is p a tc h 接 口 和 IS upport E r ro r In fo 接 口 因 而 都 支 持 OL E 异 常 处 理
不 同 的 是 T A u toIn tf O b je c t没 有 类 工 厂 要 创 建 T A u toIn tf O b je c t的 实 例 必须 调 用 它 的 构 造 函 数
3 . 7 TA ct iv eXC on tr ol
T A ctiv eX C o n tro l作 为 A c tiv e X 控 件 的 抽 象 基 类 它 是 从 T A u toO b je c t继 承 下 来的 而 T A u toO b je c t 又 是 从 T C o m O b ject 继 承 下 来 的 因 此 A c tiv e X 控 件 本质 上 也 是 CO M 对 象 支 持 OL E 自 动 化 操 作 具 有 访 问 类 型 信 息 的 能 力 所有 的 A c tiv e X 控 件 必 须 建 立 类 型 库 此 外 T A ctiv eX C o n tro l还 提 供 了 把 基 于VC L 的 控 件 转 换 为 A c tiv e X 控 件 的 能 力
在 A x C tr ls 单 元 中 T A ctiv eX C o n tro l是 这 样 声 明 的
c la s s P A S C A L IM P L E M E N T A T IO N T A c tiv e X C o n tro l : p u b lic C o m o b j::T A u to O b je c t
{
ty p e d e f C o m o b j::T A u to O b je c t in h e rite d ; priv a te :
vo id * _ IP e rs is t P ro p e r ty B a g; v o id * _ IP ers is t S tream In i t ;
vo id * _ IP e rs is t S tora g e ; v o id *_ IO b je c t Sa fe ty ; v o id *_ IO le O b je c t ;
vo id * _ IO le C on tro l ;
v o id *_ IO le In P la c e O b je c t ;
v o id * _ IO le In P la c e A c tiv e O b je c t ; v o id *_ IV ie w O b je c t ;
vo id * _ IV ie w O b je c t 2;
vo id * _ IP e r P ro p e r ty B row s ing; vo id * _ IS p e c ify P rope r ty P a g e s ; vo id * _ IS im p le F ra m e S i te ;
pub l ic :
_ fa s tc a ll v ir tu a l ~ T A c tiv e X C o n tro l( v o id ) ; v ir tu a l v o id _ fa s tc a ll In itia liz e ( v o id ) ;
v ir tu a l H R E S U L T _ s td call O b j Q u e ry In te r face( co ns t G U ID & I ID , v o id * O bj); b o o l _ fa s tc a ll P ro p R e q u e s t E d it( c o n s t S y s te m ::W id e S trin g P ro p e rty N a m e ) ;
vo id _ fa s tc a l l P ropC h a n g e d ( c o n s t S y s tem : : W ide S tr ing P rope r ty N a m e ) ;
_p rop e r ty C on tro ls : : T W inC on tro l* C o n tro l ; pub l ic :
_fa s tc a l l T A c t iv e X C o n tro l( vo id) : C o m o b j :: T A u toO b je c t( ) { }
_ fa s tc a ll T A c tiv e X C o n tro l(c o n s t _ d i_ IU n k n o w n C o n tro lle r ) : C o m o b j:: T A u toO b je c t( C o n tro lle r ) { }
_ fa s tc a ll T A c tiv e X C o n tro l( C o m o b j::T C o m O b je c t F a c to ry * F a c to ry , c o n s t
_ d i_ IU n k n o w n C o n tro lle r ) : C o m o b j::T A u to O b je c t( F a c to ry , C o n tro lle r ) { }
};
T A ctiv eX C o n tro l 定 义 了 A c tiv e X 控 件 的 核 心 行 为 和 需 要 的 各 种 接 口 用
T A ctiv eX C o n tro l为 基 类 的 A c tiv e X 控 件 可 以 嵌 入 到 任 何 一 种 A c tiv e X 容 器 中
包 括 In te rn e t E xp lore r V isu a l B a sic Po w e r B u ild e r P a ra dox Bo r la n d C+ +
In tra B u ild e r以 及 C+ + Bu ild e r 3 自 身
在 C+ + Bu ild e r 3 中 要 创 建 一 个 A c tiv e X 控 件 很 简 单 对 象 库 中 提 供 了 创 建A c tiv e X 控 件 的 向 导 您 只 要 指 定 一 个 已 有 的 VC L 控 件 向 导 就 会 把 它 转 换为 A c tiv e X 控 件
要 注 意 的 是 T A ctiv eX C o n tro l 本 身 是 个 抽 象 类 不 能 直 接 创 建 它 的 实 例您 只 能 以 T A ctiv eX C o n tro l 为 基 类 派 生 出 一 个 类 然 后 再 创 建 该 派 生 类 的 实例 即 A c tiv e X 控 件 不 过 真 正 创 建 A c tiv e X 控 件 的 实 际 上 是 类 工 厂
C o n tro l 特 性
声 明 _prope r ty C on tro ls :: T W inC on tro l* C o n tro l;
这 个 只 读 的 特 性 表 明 A c tiv e X 控 件 是 从 哪 个 VC L 控 件 转 换 而 来 的
D e fin e P ro p e r ty Pa g e s 函 数
声 明 v ir tua l vo id _fa s tc a ll D e f in e P rope r ty P a g e s ( T D e f in e P rope r ty P a g e & D e f in e P rope r ty - P a ge ) ;
当 A c tiv e X 的 特 性 页 将 要 显 示 之 前 会 调 用 这 个 函 数 因 此 如 果 要 使 A c tiv e X
控 件 能 显 示 特 性 页 您 必 须 重 载 这 个 函 数 这 个 函 数 的 名 称 取 得 不 太 好它 唯 一 的 参 数 是 D e f ine P rope r ty P a g e 与 函 数 名 仅 差 一 个 字 母D e f ine P rope r ty P a g e 参 数 本 身 是 个 回 调 函 数 这 个 回 调 函 数 也 只 有 一 个 参 数
就 是 要 显 示 的 特 性 页 对 象 的 类 标 识 符 如 果 A c tiv e X 控 件 的 特 性 比 较 多 特性 页 通 常 做 成 多 页 的 对 话 框 您 应 当 事 先 把 特 性 归 类 放 在 不 同 的 页 上
G e t P ro p e r ty S trin g 函 数
声 明 v ir tua l boo l _fa s tc a ll G e t P rope r ty S tr ing( in t D is p ID , S y s te m :: A ns i S tr in g & S ) ;
当 O b ject In s p ec to r试 图 用 一 个 字 符 串 来 表 达 某 个 特 性 当 前 的 值 时 会 调 用 这 个
函 数 如 果 A c tiv e X 控 件 有 多 个 特 性 就 会 调 用 此 函 数 多 次
D is p ID 参 数 是 特 性 的 识 别 号 如 果 需 要 让 O b je c t In s p ecto r以 一 个 特 殊 的 字 符串 显 示 特 性 的 值 就 让 S 参 数 返 回 这 个 字 符 串 并 让 函 数 本 身 返 回 T ru e 如果 不 需 要 O b ject In s p e c to r 以 一 个 特 殊 的 字 符 串 显 示 特 性 的 值 就 无 须 对 S 参数 赋 值 并 返 回 Fa ls e 此 时 O b je c t In s p e c to r将 以 标 准 的 方 式 显 示 特 性 的 值
G e t P ro p e r ty S trin g s 函 数
声 明 v ir tua l boo l _fa s tc a ll G e t P rope r ty S t r ings ( in t D is p ID , C la s s e s :: T S tr ings * S trin g s );
当 用 户 在 O b je c t In s p ecto r 中 试 图 打 开 一 个 特 性 的 值 的 列 表 时 会 调 用 这 个 函
数
D is p ID 参 数 是 特 性 的 识 别 号 如 果 需 要 显 示 一 个 下 拉 列 表 就 对 S tr ings 参 数赋 值 并 让 函 数 返 回 T ru e 要 注 意 的 是 列 表 中 的 每 一 个 值 应 当 是 唯 一 的如 果 不 需 要 显 示 下 拉 列 表 就 不 必 对 S tr ings 参 数 赋 值 并 让 函 数 返 回 Fa ls e
G e t P ro p erty Va lu e 函 数
声 明 v ir tua l vo id _fa s tc a ll G e t P rope r ty V a lue ( int D is p ID , in t C ook ie , O le V a r ia n t & V a lu e ) ;
如 果 您 重 载 了 G e t P rope r ty S tr ings 函 数 就 要 配 套 重 载 G e t P rope r ty V a lu e 当用 户 从 下 拉 列 表 中 选 择 了 一 个 字 符 串 要 把 用 户 选 择 的 字 符 串 转 换 为 数 值并 通 过 V a lu e 参 数 返 回 D is p ID 参 数 是 特 性 的 识 别 号 C ook ie 参 数 是 所 选 的项 在 列 表 中 的 序 号
I n itia liz e C o n tro l 函 数
声 明 v ir tua l vo id _fa s tc a ll In itia liz e C on tro l( vo id);
当 A c tiv e X 控 件 刚 刚 创 建 好 后 就 会 调 用 此 函 数 这 样 您 就 有 机 会 对 A c tiv e X 控件 初 始 化 一 般 是 把 事 件 句 柄 赋 给 A c tiv e X 控 件 的 事 件 特 性 程 序 示 例 如 下
v o id In itia liz e C o n tro l( )
{
m _ V c lC tl-> O n C lic k = C lic k E v e n t ;
}
L o a d F ro m S tre a m 函 数
声 明 v ir tua l vo id _fa s tc a ll L o a d F ro m S tre a m ( c ons t _d i_IS tr e a m S tr e a m ) ;
C+
- Bu ild e r 3 已 默 认 实 现 了 这 个 方 法 用 于 从 流 中 读 取 A c tiv e X 控 件 的 状 态您 可 以 重 载 这 个 方 法 读 取 任 何 通 过 Sa v e T o S tre a m 函 数 保 存 在 流 中 的 数 据S tre a m 参 数 是 要 读 写 的 流 要 从 流 中 读 取 数 据 调 用 S tre a m -> R e a d ( ) 注 意您 读 取 的 数 据 必 须 与 用 Sa v e T o S tre a m 写 入 的 数 据 匹 配
S ave To S tre a m 函 数
声 明 v ir tua l vo id _fa s tc a ll S a v e T o S tre a m ( c ons t _d i_IS tr e a m S tr e a m ) ;
C+
- Bu ild e r 3 已 默 认 实 现 了 这 个 方 法 用 于 把 A c tiv e X 控 件 的 状 态 写 到 流 中您 可 以 重 载 这 个 方 法 把 其 它 任 何 要 保 存 的 数 据 保 存 到 流 中
S tre a m 参 数 是 要 读 写 的 流 要 把 数 据 保 存 到 流 中 调 用 S tre a m -> W r i te ( )
P e r fo r m Ver b 函 数
声 明 v irtu a l v o id _ fa s tc a ll P e rfo rm V e rb ( in t V e rb );
如 果 您 调 用 了 T A c tiv e X C o n tro lF a c to r y 的 A ddV e rb 函 数 给 A c tiv e X 控 件 增 加 了一 个 动 作 您 应 当 重 载 这 个 方 法 具 体 实 现 这 个 动 作 当 用 户 在 A c tiv e X 控 件上 单 击 鼠 标 右 键 在 弹 出 的 菜 单 中 选 择 该 动 作 项 时 就 会 调 用 这 个 方 法 其 中 V e rb 参 数 是 动 作 项 的 编 号
I n itia liz e 函 数
声 明 v ir tua l vo id _fa s tc a ll In itia liz e ( vo id);
这 个 函 数 有 点 类 似 于 构 造 函 数 用 于 创 建 类 工 厂 对 象 并 且 把 此 对 象 与
T A ctiv eX C o n tro l联 系 起 来 以 便 操 纵 A c tiv e X 控 件
O b j Q u e r y I n ter fa c e 函 数
声 明 v ir tua l H R E S U L T _s td c a l l O b j Q ue ry In te r fa c e ( c ons t G U ID & I ID , vo id
*O b j) ;
这 个 函 数 实 际 上 是 映 射 了 IU nkno w n 接 口 中 的 Q u ery In terfa c e 函 数 用 于 返 回
IID 参 数 指 定 的 接 口
P rop C h an ge d 函 数
声 明 vo id _fa s tc a ll P ropC ha nge d( c ons t S y s te m : : W ide S tr ing P rope r ty N a m e ) ;
调 用 此 函 数 将 触 发 O n C h a nge d 事 件 表 示 P rope r ty N a m e 参 数 指 定 的 特 性 的 值已 改 变
P ro p R e que s t E d it 函 数
声 明 bool _fa s tc a ll P ropR e que s t E d it( c ons t S y s te m : : W id e S tr ing P rope r ty N a m e ) ; 这 个 函 数 返 回 P rope r ty N a m e 参 数 指 定 的 特 性 是 否 可 以 编 辑 返 回 T ru e 表 示 可以 编 辑
- 8 TC om Se rve rO bj ec t
T C o m S e rv er O b ject是 从 T O b ject 直 接 继 承 下 来 的 作 为 TC o m Se rv e r 的 基 类在 Co m O b j单 元 中 TC o m S e rv e r O b je c t是 这 样 声 明 的
c la s s PA SC A L IM PL E M E N T A T IO N T C o m Se rv e r O b je c t : p u b l ic Sy s te m : : T O b je c t
{
pub l ic :
_ p ro p e rty S y s te m ::A n s iS trin g H e lp F ile N a m e ;
_ p ro p e rty S y s te m ::A n s iS trin g S e rv e r F ile N a m e ;
_ p ro p e rty S y s te m ::A n s iS trin g S e rv e r K e y ;
_ p ro p e rty S y s te m ::A n s iS trin g S e rv e r N a m e ;
_p rop e r ty _d i_ IT y pe L ib T y p e L ib;
_ fas tc all T C o m S e rv er O b je ct( v o id ) : S y s tem : : T O b ject( ) { }
_ fa s tc a ll v ir tu a l ~ T C o m S e rv e r O b je c t( v o id ) { }
};
可 以 看 出 T C o m S e rv er O b ject所 有 的 方 法 都 是 虚 拟 的 和 抽 象 的 这 意 味 着您 不 能 直 接 创 建 它 的 实 例 TC o m S e rv e r O b je c t的 5 个 公 共 的 特 性 都 是 只 读 的真 正 的 含 义 取 决 于 TC o m S e rv e r怎 样 实 现 上 述 几 个 虚 拟 和 抽 象 的 方 法
- 9 TC om Se rve r
TC o m S e rv e r 是 CO M 服 务 器 的 基 类 CO M 服 务 器 可 以 理 解 为 组 件 对 象 的 容器 从 形 式 上 讲 CO M 服 务 器 可 以 是 In -P ro c e s s 型 即 DL L 也 可 以 是 Lo c a l型即 EX E
Co m S e rv 单 元 中 声 明 了 一 个 Co m S e rv e r 变 量 并 自 动 创 建 了 TC o m Se rv e r 的 实例 就 象 Fo rm s 单 元 中 的 A p p lic a tio n 变 量 一 样 您 用 不 着 再 专 门 创 建TC o m S e rv e r的 实 例
在 Co m S e rv 单 元 中 TC o m S e rv e r是 这 样 声 明 的 ( 按 O b ject P a s c a l的 语 法 ) T C o m S e rv er = C las s ( T C o m S e rv e r O b je ct)
P riv a te
{ 私有的成 员此处省略 } P ro tected
{ 重载 T C o m S e rv er O b jec t中的虚拟 方法 }
F u n c tio n C o u n tO b je c t( C re a te d : B o o le a n ) : In te g e r ; o v e r r id e ; F unc t io n C o u n t F a c tory ( C re a te d : B o o le a n): In te g e r ; o v e r r ide ; F unc t io n G e t H e lpF i le N a m e : s tr ing; ov e r r id e ;
F u n c tio n G e tS e rv e r F ile N a m e : s tr in g ; o v e r r id e ; F unc t io n G e t S e rv e r K e y : s tr ing; ove r r id e ;
F u n c tio n G e tS e rv e r N a m e : s tr in g ; o v e r r id e ; F u n c tio n G e tT y p e L ib : IT y p e L ib ; o v e r r id e ;
P u b lic
C o n s tru c to r C re a te ;
D e s tru c tor D e s tro y ; ove r r id e ; P ro c e d u re In itia liz e ;
P ro ced u re L o ad T y p e L ib ;
P ro ced u re S e t S erv e r N am e( co n s t N a m e : s tr in g ) ; P ro ced u re U p d a te R e g is try ( R eg is te r : B o o lea n ) ;
P ro p erty Is In p ro c S e rv er: B o o lea n re a d F I s In p ro cS erv e r w r i te F I s In p ro cS erv e r ; P ro p e rty O b je c t C o u n t: In te g e r re a d F O b je c t C o u n t;
P ro p e rty S ta r t M o d e : T S ta r t M o d e re a d F S ta rtM o d e ;
P ro p erty O n L a s t R e leas e: T L a s t R e lease E v e n t re a d F O n L as t R ele a s e w r i te F O n L as t R elea s e ;
En d ;
另 外 Co m S e rv 单 元 中 还 声 明 了 几 个 全 局 例 程 用 于 自 动 管 理 CO M 服 务 器的 注 册 撤 消 注 册 以 及 卸 载 如 果 CO M 服 务 器 是 In -P ro c e s s 型 必 须 输 出 这几 个 例 程 D llG e t C la s s O b je c t D llC a n U n lo a d N o w D llR e g is te r S e rv e r
D llU n re g is te r S e rv e r
Co m S e rv e r 变 量 用 T C o m C las s M an ag er 管 理 类 工 厂 T C o m C la s s M an ag er 是 在Co m O b j 单 元 中 声 明 的 这 个 单 元 已 经 自 动 声 明 了 T C o m C las s M an ag er 的 实例 C o m C la s s M an ag er变 量
H e lp F ile N a m e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing H e lp F ile N a m e ;
这 个 特 性 用 于 返 回 与 CO M 服 务 器 模 块 关 联 的 帮 助 文 件 名
IsIn p ro c S e r v e r 特 性
声 明 _prope r ty bool Is Inproc S e rv e r ;
如 果 CO M 服 务 器 是 In - P ro ces s 型 的 服 务 器 这 个 特 性 就 返 回 T ru e In -P ro c e s s
型 的 CO M 服 务 器 一 般 是 DL L 而 Lo c a l型 的 服 务 器 一 般 是 EX E
O b je c t C o u n t 特 性
声 明 _prope r ty in t O b je c t C o un t;
这 个 特 性 返 回 有 多 少 个 对 象 当 前 依 赖 于 此 CO M 服 务 器 如 果 这 个 特 性 返 回零 表 示 当 前 没 有 哪 个 对 象 在 使 用 CO M 服 务 器 此 时 CO M 服 务 器 就 可 以卸 载 了 当 CO M 服 务 器 卸 载 时 将 触 发 O n L a s t R e leas e 事 件 可 见 O b je c t C ount 类 似 于 引 用 计 数
S erv e r F ile N a m e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing S e rv e r F ile N a m e ;
这 个 特 性 返 回 CO M 服 务 器 模 块 的 文 件 名 包 括 完 整 的 路 径
S erv e r K e y 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing S e rv e r K e y ;
如 果 这 个 特 性 返 回 Inproc S e rv e r 32 表 示 CO M 服 务 器 是 In -P ro c e s s 型 服 务器 如 果 这 个 特 性 返 回 L o ca l S erv e r 3 2 表 示 CO M 服 务 器 是 Lo c a l型 服 务器
S ta r t M o d e 特 性
声 明 _prope r ty T S ta r t M ode S ta r t M ode ;
这 个 特 性 用 于 返 回 CO M 服 务 器 被 启 动 的 原 因 可 以 是 以 下 值 ( 含 命 令 行 开关 )
返 回 值 |
命 令 行 开关 |
含 义 |
|||||||
---|---|---|---|---|---|---|---|---|---|
sm A u to m a t io n |
em b e dd ing |
由 请 |
W 求 |
ind ow s 响 而 启 动 |
应 |
CO M |
客 |
户 |
的 |
续 表
sm R e g S erv e r sm S ta n d a lone sm U n re gS e rve r |
re g s e r ve r --- unre g s erv e r |
仅 用立仅 |
仅 户的仅 |
是 把程是 |
为 了 注 册 CO M 服 序 启 动为 了 撤 消 |
而务 注 |
启器 册 |
动作 而 |
为启 |
独动 |
S erv e r N a m e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing S e rv e r N a m e ;
这 个 特 性 返 回 CO M 服 务 器 的 名 称
Ty p e L ib 特 性
声 明 _prope r ty IT y p e L ib T y pe L ib;
这 个 特 性 返 回 CO M 服 务 器 的 类 型 库
L oad Ty p e L ib 函 数
声 明 vo id _fa s tc a ll L o a d T y pe L ib( vo id);
这 个 函 数 把 CO M 服 务 器 的 类 型 库 调 入 如 果 类 型 库 还 没 有 准 备 好 就 注 册类 型 库 如 果 Lo a d T y p e L ib 调 用 失 败 将 触 发 EO le S y s E r ro r 异 常 此 时 您可 以 访 问 有 关 错 误 码
E _ OUT OF M E M O R Y E _ INVA L IDAR G
T Y P E _ E _ IO E RRO R
TY P E _ E _ IN V A L ID S T A T E T Y P E _ E _ INV DAT AR E A D T Y P E _E _U N S U P F O R M A T T Y P E _ E _ U N KNOW N L C ID
T Y P E _E _C A N T L O A D L IB R A R Y
S e t S erv e r N a m e 函 数
内存 不够
部分 参数 是非 法的无法 写文 件
类型 库还 没有 打开无法 读文 件
类型 库的 格式 是老的
在 OL E 支持 D L L s 中没 有找 到 LC ID
类型 库或 DL L 无法 调入
声 明 v ir tua l vo id _fa s tc a ll S e t S e rve r N a m e ( c ons t S y s te m : : A n s i S tr ing N a m e ) ;
这 个 函 数 用 于 设 置 CO M 服 务 器 的 名 称 不 过 如 果 CO M 服 务 器 有 类 型 库 的话 这 个 函 数 就 什 么 也 不 干 因 为 服 务 器 的 名 称 与 类 型 库 的 名 称 应 当 一 致
U pda te R e g is tr y 函 数
声 明 v ir tua l vo id _fa s tc a ll U pda te R e g is try ( boo l R e g is te r ) ;
这 个 函 数 用 CO M 服 务 器 最 新 的 状 态 更 新 注 册 表 如 果 R e g is te r 参 数 设 为 T ru e
表 示 注 册 如 果 R e g is te r参 数 设 为 Fa ls e 表 示 撤 消 注 册
O n L a s t R e le a s e 事 件
声 明 _ p ro p e r ty T L as t R ele a s e E v en t O n L a s t R e leas e;
其 中 T L a s t R e leas eE v e n t是 这 样 声 明 的
ty p e d e f vo id _fa s tc a ll (_ c los ure * T L a s t R e le a s e E ve n t) ( T O b je c t* S e nde r , bool & S hu tdow n);
当 使 用 CO M 服 务 器 的 最 后 一 个 对 象 被 删 除 后 也 就 是 O b je c t C ount特 性 减 到
零 后 CO M 服 务 器 就 可 以 卸 载 了 此 时 将 触 发 O n L a s t R e leas e 事 件 在 处 理此 事 件 的 句 柄 中 如 果 把 S h u t D o wn 参 数 设 为 T ru e 表 示 真 的 要 卸 载 CO M 服务 器 如 果 把 S hu tdow n 参 数 设 为 Fa ls e 表 示 不 卸 载 CO M 服 务 器
- 1 0 TA ct iv eFo rm
T A ctiv eF o rm 用 于 作 为 A c tiv e F o rm 的 基 类 关 于 A c t iv e F o rm 的 概 念 后 面 详 细阐 述 这 里 您 可 以 简 单 地 把 它 看 作 做 是 一 个 复 合 的 A c tiv e X 控 件 可 以 嵌 入到 W e b 页 面 中 传 递 从 本 质 上 讲 A c tiv e F o rm 也 是 Fo rm 只 不 过 A c tiv e F o rm 上 的 控 件 都 是 内 部 使 用 的 对 于 客 户 程 序 来 说 A c tiv e F o rm 是 一 个 整 体
C+
- Bu i ld e r 3 在 对 象 库 中 提 供 了 创 建 A c tiv e F o rm 的 向 导 创 建 好 后 您 可 以使 用 P ro ject 菜 单 上 的 W e b D e p lo y 命 令 发 布 A c tiv e F o rm
在 A x C tr ls 单 元 中 T A ctiv eF o rm 是 这 样 声 明 的 ( 按 O b ject P a s c a l的 语 法 声 明 )
T A c t iv e F o rm = C la s s ( T C u s to m F o rm ) P riv a te
F A x B o rd e r S ty le : T A c tiv e F o rm B o rd e r S ty le ;
P ro c e d u re S e tA x B o rd e r S ty le ( V a lu e : T A c tiv e F o rm B o rd e r S ty le ) ; P ro tected
P ro cedu re D e fin e P ro p e rty P ag es(D efin eP ro p e rty P ag e:T D efin eP ro p e rty P ag e);v irtu a l; P ro ced u re C re a te P a ra m s ( v a r P a ra m s : T C re a teP aram s ) ; o v errid e ;
P roc e d ure E v e n tS in kC ha n g e d ( c o n s t E v e n t S in k: IU n k n o w n ) ; v ir tu a l ; P ro c e d u re In itia liz e ; v ir tu a l;
P u b lic
C ons tru c to r C re a te ( A O w n e r : T C om p o n e n t) ; ov e r r id e ;
F unc tio n W a n tC h ildK e y(C h ild :T C on tro l;v a r M e ssag e :T M e ssage ):B oo lea n ;o v e rride ; P ub lis he d
P ro p e rty A x B o rd e r S ty le : T A c tiv e F o rm B o rd e r S ty le re a d F A x B o rd e r S ty le
{ 以 下 特 性 和 事 件 都 是 从 T C us to m F orm 继 承 的 }
… E nd;
除 了 从 T C us to m F orm 继 承 下 来 的 特 性 和 事 件 外 T A ctiv eF o rm 中 唯 一 公 开 的特 性 是 A x B o rd e r S ty le 用 于 设 置 A c tiv e F o rm 的 边 框 样 式 可 以 设 为 以 下 值 a fbN one ( 没 有 边 框 ) a fbS ing le ( 普 通 的 单 细 线 边 框 ) a fbS unke n( 凹 进 的 3D 边框 ) a fbR a is e d( 突 起 的 3D 边 框 )
T C us to m F orm 中 有 几 个 可 重 载 的 方 法 其 中 D efine P roperty P a g e s E v e n t S inkC ha ng e d 和 In itia liz e 前面已经讲 过 C reateP a ra m s 一 般 不 需 要 重 载T C us to m F orm 中 有 一 个 W an tC h ild K e y函数 它 是 这 样 声 明 的
v ir tua l boo l _fa s tc a ll W a n t C h i ldK ey ( T C on tro l C h i ld, T M e s s a ge & M e s s a ge )
当 Fo rm 上 的 控 件 接 收 到 键 盘 输 入 时 会 调 用 这 个 函 数 如 果 让 这 个 函 数 返 回
T ru e 该 控 件 不 对 消 息 进 行 任 何 处 理 只 是 把 消 息 传 递 给 Fo rm
- 11 TP ro pe rty Pa ge
T P rope r ty P a g e 用 于 作 为 A c tiv e X 控 件 和 A c tiv e F o rm 的 特 性 页 TP ro p e r ty P a g e 也 是 从 T C us to m F orm 继 承 下 来 的 因 此 特 性 页 本 质 上 也 是 Fo rm 与 普 通的 Fo rm 不 同 的 是 特 性 页 通 常 是 模 式 Fo rm 而 且 能 够 读 取 A c t iv e X 控 件 或A c tiv e F o rm 的 特 性 值 到 特 性 页 上 或 者 把 用 户 在 特 性 页 上 的 修 改 写 回 到A c tiv e X 控 件 或 A c tiv e F o rm 中
T P rope r ty P a g e 是 个 虚 拟 基 类 您 不 能 直 接 创 建 它 的 实 例 您 只 能 以T P rope r ty P a g e 为 基 类 在 派 生 类 中 重 载 一 些 方 法 然 后 再 创 建 派 生 类 的 实例
在 A x C tr ls 单 元 中 T P rope r ty P a g e 是 这 样 声 明 的
c la s s P A S C A L IM P L E M EN TA T IO N TP ro p e r ty P a g e : p u b l ic F o rm s : : T C u s to m F o rm
{
ty p e d e f F o rm s ::T C u s to m F o rm in h e rite d ; priv a te :
T P ro p e r ty P ag eIm p l* F A ctiv eX P ro p erty P a g e ; S y s tem : : O leV aria n t F O le O b ject;
C la s s e s ::T In te r fa c e L is t* F O le O b je c ts ;
H IDE S B AS E M E S S AGE v o id _ fa s tc a l l C M C h a n g e d ( T C M C h a n g e d & M s g ) ; pub l ic :
_ fas tc all v ir tu a l T P ro p e r tyP ag e( C las se s : : T C o m p on en t* A O w n er);
_ fa s tc a ll v ir tu a l ~ T P ro p e r ty P a g e ( v o id ) ; vo id _ fa s tc a l l M od if ie d ( v o id);
v ir tu a l v o id _ fa s tc a ll U p d a te O b je c t( v o id ) ;
v ir tu a l v o id _ fa s tc a ll U p d a te P ro p e r ty P a g e ( v o id ) ;
_ p ro p e rty S y s te m ::O le V a r ia n t O le O b je c t = { re a d = F O le O b je c t} ;
_ p ro p e rty C la s s e s ::T In te r fa c e L is t* O le O b je c ts ;
vo id _ fa s tc a l l E num C t l P rops ( c o n s t G U ID & P ropT y p e , T S tr in g s * P ropN a m e s ) ;
_pu b lis h e d:
_ p ro p e rty A c tiv e C o n tro l ;
// 以下特性 和事件都是从 TC u s to m F o rm 继承的
… pub l ic :
_ fa s tc a ll T P ro p e r ty P a g e ( C la s s e s ::T C o m p o n e n t* A O w n e r , in t D u m m y ) : F o r m s : : T C u s to mF o rm ( AO w n e r , D u m m y ) { }
_fa s tc a l l T P rope r ty P a g e ( H W N D P a re n t W indow ) : F o rm s : : T C us to m F o rm ( P a re n t W indow ) { }
};
创 建 特 性 页 需 要 重 载 U pda te O b je c t和 U pda te P rope r ty P a g e 两 个 函 数 前 者 用 于把 用 户 在 特 性 页 中 的 修 改 写 回 到 A c tiv e X 控 件 或 A c tiv e F o rm 中 后 者 用 于 读
取 A c tiv e X 控 件 或 A c tiv e F o rm 的 特 性 值 到 特 性 页 上
O le O b je c t 特 性
声 明 _prope r ty S y s te m : : O le V a r ia n t O le O b je c t;
这 个 只 读 的 特 性 返 回 特 性 页 正 在 编 辑 的 A c tiv e X 控 件 或 A c tiv e F o rm 这 样您 就 可 以 访 问 A c tiv e X 控 件 或 A c tiv e F o rm 的 特 性 或 方 法
- 1 2 TC om Ob jec tF ac to ry
在 Co m O b j单 元 中 T C om O b je c t F a c tor y 是 这 样 声 明 的
clas s P A S C A L IM P L E M E N T A T IO N T C o m O b je ct F acto ry : p u b l ic S y s tem : : T O b ject
{
ty p e d e f S y s te m ::T O b je c t in h e rite d ; priv a te :
v o id *_ IU nk n o w n ;
vo id * _ IC la ss F a c tory ; vo id * _ IC la ss F a c tory 2 ;
pub l ic :
_ fas tc all T C o m O b ject F acto ry ( T C o m S e rv er O b je c t* C o m S e rver, S y s tem : : T M e ta C la s s * C o m C la s s , c o n s t G U ID & C la s s ID , c o n s t S y s te m ::A n s iS trin g
C la s s N a m e , c o n s t S y s te m ::A n s iS trin g D e s c r ip tio n , T C la s s In s ta n c in g In s ta n c in g ) ;
_fa s tc a l l v ir tua l ~ T C o m O b je c tF a c tory ( vo id ) ;
T C o m O b je c t* _ fa s tc a l l C re a te C o m O b je c t( c o n s t _ d i_ IU n k n o w n C o n tro lle r ) ; vo id _ fa s tc a l l R e g is te r C la ss O b je c t( v o id ) ;
v ir tu a l v o id _ fa s tc a ll U p d a te R e g is try ( b o o l R e g is te r ) ;
_ p ro p e r ty GU ID C la s s ID ;
_ p ro p e rty S y s te m ::A n s iS trin g C la s s N a m e ;
_ p ro p e rty S y s te m ::T M e ta C la s s * C o m C la s s ;
_p rop e r ty T C om S e rv e r O b je c t* C o m S e rv e r ;
_ p ro p e rty S y s te m ::A n s iS trin g D e s c r ip tio n ;
_ p ro p e r ty G U ID E rro r IID ;
_p rop e r ty S y s tem : : W ide S tr ing L ic S tr ing ;
_p rop e r ty S y s tem : : A ns i S tr ing P rogID ;
_ p ro p e r ty T C la s s In s tan c in g In s ta n cin g ;
_p rop e r ty boo l S how E r ro rs ;
_p rop e r ty boo l S u p ports L ic e n s ing ;
};
T C o m O b je c t F acto r y 就 是 前 面 一 再 提 到 的 类 工 厂 从 上 述 声 明 可 以 看 出
T c o m O b je ct- F acto r y 同 时 支 持 IU know n IC la s s F a c to ry 和 IC la ssF a c to r y 2 接 口类 工 厂 的 作 用 是 创 建 和 输 出 CO M 对 象 的 实 例 并 在 W ind ow s 的 注 册 表 中 注册 CO M 对 象 类 工 厂 本 身 的 实 例 一 般 应 当 在 项 目 文 件 中 建 立 也 可 以 由W ind ow s 的 Co C re a te C la s s O b je c t函 数 建 立 那 么 到 底 该 怎 样 选 择 呢 用 构 造函 数 适 合 于 只 建 立 类 工 厂 的 一 个 实 例 而 Co C re a te C la s s O b je c t函 数 适 合 于 建立 多 个 实 例
CO M 服 务 器 所 拥 有 的 类 工 厂 由 T C o m C las s M an a g er 来 管 理 在 Co m O b j 单 元中 已 自 动 创 建 了 T C o m C las s M an a g er的 实 例 叫 C o m C la s s M an ag er
C la ssI D 特 性
声 明 _prope r ty G U ID C la s s ID ;
这 个 只 读 的 特 性 返 回 类 工 厂 所 要 创 建 实 例 的 CO M 对 象 的 类 标 识 符 CL S ID
在 调 用 T C o m O b je c t F acto ry 的 构 造 函 数 时 必 须 指 定 CO M 对 象 的 类 标 识 符
( C la ssID 参 数 )
C la ss N a m e 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing C la s s N a m e ;
这 个 只 读 的 特 性 返 回 类 工 厂 所 要 创 建 实 例 的 CO M 对 象 的 类 名 在 调 用T C o m O b je c t F acto r y 的 构 造 函 数 时 必 须 指 定 CO M 对 象 的 类 名 ( C la ssN a m e 参数 )
C o m C la s s 特 性
声 明 _ p ro p e r ty S y ste m : : T M e ta C la ss* C o m C la ss;
这 个 只 读 的 特 性 返 回 类 工 厂 所 要 创 建 实 例 的 CO M 对 象 的 类 型
T C o m C las s M an ag er 的 G e tF a c to r y F ro m C la s s 函 数 要 用 到 CO M 对 象 的 类 型在 调 用 T C o m O b je c t F acto ry 的 构 造 函 数 时 必 须 指 定 CO M 对 象 的 类 型(C o m C la s s 参 数 )
C o m S erv e r 特 性
声 明 prope r ty C o m S e rve r : T C o m S e rv e r O b je c t ;
这 个 只 读 的 特 性 返 回 拥 有 这 个 类 工 厂 的 CO M 服 务 器 在 调 用
T C o m O b je c t F acto r y 的 构 造 函 数 时 必 须 指 定 CO M 服 务 器 (C o m S e rv e r参 数 )
D e s crip tio n 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing D e s c r ip tion;
这 个 只 读 的 特 性 从 CO M 对 象 的 类 型 库 中 返 回 关 于 此 对 象 的 描 述 当 类 工 厂在 注 册 表 中 注 册 CO M 对 象 时 需 要 指 定 一 个 字 符 串 来 描 述 要 注 册 的 CO M 对象 在 调 用 T C o m O b je c t F acto ry 的 构 造 函 数 时 必 须 指 定 此 字 符 串 ( D e s c rip tio n 参 数 )
I n sta n c in g 特 性
声 明 _prope r ty T C la s s Ins ta nc in g In s ta n c ing;
这 个 只 读 的 特 性 返 回 CO M 对 象 被 创 建 的 方 式 返 回 c i In te rn a l表 示 CO M 对 象是 CO M 服 务 器 内 部 使 用 的 返 回 ciS in g le In s tan c e 表 示 在 同 一 个 时 刻 CO M 对象 只 有 一 个 实 例 返 回 c i M u ltiIn s ta n c e 表 示 在 同 一 个 CO M 对 象 可 以 有 多 个 实例
P rogI D 特 性
声 明 _prope r ty S y s te m : : A n s i S tr ing P rogID ;
这 个 只 读 的 特 性 返 回 类 工 厂 的 P rog ID 凡 是 可 以 插 入 到 OL E 容 器 的 对 象 都
有 其 P rogID
Suppo r ts L ic e n s in g 特 性
声 明 _prope r ty bool S upports L ic e n s ing;
如 果 这 个 特 性 设 为 T ru e 类 工 厂 要 创 建 的 CO M 对 象 的 实 例 将 支 持 许 可检 查 功 能
C re a te C o m O b je c t 函 数
声 明 v ir tua l T C o m O b je c t* _fa s tc a l l C re a te C o m O b je c t( c ons t _d i_ IU nkn ow n C on tro l le r ) ;
这 个 函 数 用 于 创 建 CO M 对 象 的 实 例 它 实 际 上 是 调 用 T C o m O b ject的 一 个 构
造 函 数 并 把 类 工 厂 自 己 传 递 给 C reateF ro m F a c to r y 的 F acto ry 参 数
R e g iste r C la ss O b je c t 函 数
声 明 vo id _fa s tc a ll R e g is te r C la s s O b je c t( vo id);
这 个 函 数 用 于 注 册 类 工 厂 所 创 建 的 CO M 对 象 如 果 没 有 注 册 成 功 将 触 发E O le S y s E rro r 异 常 可 能 的 错 误 码 有 E _ INVAL IDAR G 表 示 可 能 参 数 是 非法 的 E _ OUT OF M E M O R Y 表 示 内 存 不 够 E _ UNE XP E C T E D 表 示 是 未 预 计到 的 错 误 C O _E _O B J IS R E G 表 示 CO M 对 象 已 经 注 册 只 有 EX E 类 型 的 CO M 服 务 器 应 当 调 用 R e g is ter C las s O b ject 来 注 册 CO M 对 象 如 果 CO M 服 务 器 是DL L 不 要 调 用 R e g is ter C las s O b ject 而 是 在 项 目 文 件 中 实 现 并 输 出D llG e t C la s s O b je c t函 数
U pda te R e g is tr y 函 数
声 明 v ir tua l vo id _fa s tc a ll U pda te R e g is try ( boo l R e g is te r ) ;
这 个 函 数 也 是 用 于 注 册 类 工 厂 创 建 的 CO M 对 象 不 同 的 是 如 果 R e g is te r参数 设 为 Fa ls e 就 撤 消 对 CO M 对 象 的 注 册
1 3 TT yp ed Com Ob je ct Fac to ry
T T y p ed C o m O b jectF a c to r y 是 从 T C o m O b je c tF ac to r y 直 接 继 承 下 来 的 如 果 说T C o m O b je c t F acto r y 是 对 应 于 TC o m O b je c t 的 类 工 厂 的 话 那 么 T T y p ed C o m O b jectF a c to r y 就 是 对 应 于 T T y pe d C om O b je c t的 类 工 厂
在 Co m O b j单 元 中 T T yp ed C o m O b jec t F ac to r y 是 这 样 声 明 的
c la s s PA S C A L IM P LEM EN TAT IO N T T y p e d C o m O b je c t F a c to ry : p u b l ic C o m o bj:: T C o m O bject F a cto ry
{
ty pe de f C o m o b j : : T C o m O b je c t F a c tory inhe r ite d ; pub l ic :
_ fas tc all T T y p e d C o m O b je c t F acto ry ( T C o m S e rv er O b je ct* C o m S erv e r , S y s tem : : T M e ta C la s s * T y pe dC om C la s s , G U ID & C la s s ID , T C la s s Ins ta nc in g In s ta n c ing);
_d i_ IT y pe In fo _fa s tc a l l G e t In te r fa c e T y pe In fo ( int T y pe F la g s ) ; v ir tu a l v o id _ fa s tc a ll U p d a te R e g is try ( b o o l R e g is te r ) ;
_p rop e r ty _d i_ IT y pe In fo C la s s Info ;
pub l ic :
_fa s tc a l l v ir tua l ~ T T y pe d C om O b je c t F a c tory ( vo id) { }
};
根 据 类 的 传 递 规 则 T T yp ed C o m O b jec t F a c to r y 也 支 持 IU nknow n IC la s s F a c to ry 和 IC la s s F a c to r y 2 接 口 与 T C om O b je c t F a c tor y 相 比 T T y p ed C o m O b je c t F ac to r y 的 构 造 函 数 稍 有 不 同 并 增 加 了 C la ssIn fo 特 性 和 G e t In terfaceT yp eIn fo 函 数
C la ssIn fo 特 性
声 明 _prope r ty _d i_ IT y pe In fo C la s s Info;
T T y p ed C o m O b ject的 特 点 是 无 须 调 入 类 型 库 就 可 以 直 接 读 取 类 型 信 息 这 个特 性 用 于 返 回 类 型 信 息 的 接 口 引 用 IT y p e In fo 接 口 用 于 从 类 型 库 中 提 取 有关 信 息
G e t I n te r fa c e Ty pe I n fo 函 数
声 明 _d i_IT y pe In fo _fa s tc a ll G e t In te r fa c e T y p e Info( in t T y pe F la g s ) ;
这 个 函 数 从 由 类 工 厂 创 建 的 T T yp ed C o m O b jec t的 实 例 中 检 索 类 型 信 息
1 4 TA ct iv eXP ro pe rt yPa ge Fa cto ry
T A ctiv eX P ro p e r tyP ag eF acto r y 也 是 直 接 从 TC o m O b je c t F a c to ry 继 承 下 来 的 因此 它 与 T T y p ed C o m O b jec t F a c to r y 是 平 级 的 它 是 A c tiv e X 控 件 和 A c tiv e F o rm
的 特 性 页 的 类 工 厂
在 A x C tr ls 单 元 中 T A ctiv eX P ro p e r tyP ag eF a c to r y 是 这 样 声 明 的 ( 按 O b ject P a s cal的 语 法 声 明 )
T A ctiv eX P ro p erty P a g e F a cto ry = C la s s ( T C o m O b ject F ac to ry) P ro tected
F unc t io n C re a te C om O b je c t( c o n s t C o n tro l le r : IU nk no w n ) : T C om O b je c t ; ove r r ide ; P u b lic
C o n s tru c to r C re a te ( C o m S e rv e r : T C o m S e rv e r O b je c t; P ro p e r ty P a g e C la s s : T P ro p e r ty P ag eC la s s ; co n s t C las s ID : T G U ID ) ;
En d ;
特 性 页 也 是 CO M 对 象 (T P ro p e rty P a g e ) 它 也 需 要 用 类 工 厂 来 创 建 实 例
构 造 函 数
声 明 c o n s tru c to r C re a te ( C o m S e rv e r : T C o m S e rv e r O b je c t; P ro p e r ty P a g e C la s s T p ro p e r ty P a g e C la s s ; c o n s t C la s s ID: T GU ID );
构 造 函 数 用 于 创 建 类 工 厂 的 实 例 其 中 Co m S e rv e r参 数 指 定 CO M 服 务 器
通 常 把 Co m S e rv 单 元 中 的 全 局 变 量 Co m S e rv e r 传 递 给 Co m S e rv e r 参 数
P ro p e r tyP ag eC la s s 参 数 是 特 性 页 对 象 的 类 名 这 个 类 必 须 是 从 T P rope r ty P a g e 继 承 下 来 的 C la ssID 参 数 用 于 指 定 特 性 页 对 象 的 GU ID 通 常 先 声 明 一 个 常量 然 后 用 这 个 常 量 作 为 C la ssID 参 数
- 1 5 TA ut oO bje ct Fa ct ory
OL E 自 动 化 服 务 器 也 是 CO M 对 象 因 此 也 需 要 类 工 厂 T A u to O b jectF acto ry 是 T A u toO b je c t 的 类 工 厂 在 Co m O b j 单 元 中 T A u toO b je c t F a c tory 是 这 样 声明 的
clas s PA S C A L IM P L E M E N TAT IO N TA u to O bject F ac to ry : pub l ic C o m o b j : : T T y p e dC om O b je c t F a c tory
{
ty pe de f C o m o b j : : T T y pe d C om O b je c t F a c tory inhe r i te d; pub l ic :
_ fas tc all T A u to O b ject F ac to ry ( T C o m S e rv er O b ject* C o m S erv e r , S y s tem : :
T M etaC la s s * A u to C la s s , c o n s t G U ID & C la s s ID , T C la s s In s tan cing In s tan c in g ) ; v ir tu a l S y s te m : : P In te r faceE n try _ fa s tcall G e t In tf E n try ( c o n s t G U ID & G u id ) ;
_ p ro p e r ty S y s te m : : P In te r faceE n try D is p In tf E n try = {re a d = F D is p In tf E n try } ;
_p rop e r ty _d i_ IT y pe In fo D isp T y pe In fo = { re a d = F D is p T y p e In fo } ; pub l ic :
_ fa s tc a ll v ir tu a l ~ T A u to O b je c t F a c to ry ( v o id ) { }
};
根 据 类 传 递 的 规 则 T A u to O b jectF acto ry 支 持 IC la ssF a c to r y 和 IC la ssF a c to r y 2
接 口
D is p I n tf E n tr y 特 性
声 明 _ p ro p e r ty S y s tem : : P In te r faceE n tr y D is p In tf E n tr y ;
其 中 P In terfa ceE n try 是 这 样 声 明 的
s tru ct P A C K A G E T In terfa ce E n try
{
T GU ID I ID;
vo id * V T a b le ; in t IO f fs e t ;
};
ty pe de f T In te rfa c e E n try *P In te r fa c e E n try ;
这 个 只 读 的 特 性 返 回 OL E 自 动 化 对 象 实 现 的 调 度 接 口 的 有 关 信 息 实 际 上是 一 个 记 录 的 指 针 这 个 特 性 在 创 建 类 工 厂 的 实 例 时 被 初 始 化
D is p Ty p e In fo 特 性
声 明 _prope r ty _d i_ IT y pe In fo D is p T y pe In fo ;
这 个 只 读 的 特 性 返 回 一 个 IT y p e In fo 接 口 的 引 用 通 过 这 个 接 口 可 以 读 取 OL E
自 动 化 对 象 的 类 型 信 息
G e t I n tf E n tr y 函 数
声 明 v ir tu a l S y s te m :: P In te r faceE n tr y _ fa s tc a l l G e t In tf E n tr y ( c o n s t G U ID & G u id);
这 个 函 数 返 回 G u id 参 数 指 定 的 接 口 的 有 关 信 息 实 际 上 是 一 个 记 录 的 指 针注 意 这 个 函 数 一 般 只 在 内 部 调 用 程 序 不 要 直 接 调 用 它
1 6 TA ct iv eXC on tr ol Fac to ry
A c tiv e X 控 件 是 典 型 的 CO M 对 象 因 此 A c tiv e X 控 件 也 需 要 用 类 工 厂 创 建实 例 并 注 册 T A c tiv e X C o n tro lF a c to r y 就 是 A c t iv e X 控 件 的 类 工 厂
在 A x C tr ls 单 元 中 T A c tiv e X C o n tro lF a c to r y 是 这 样 声 明 的
clas s PA S C A L IM P L E M E N TAT IO N TA ctiv eX C o n tro l F a c to ry : p u b lic C o m o b j::T A u to O b je c tF a c to ry
{
ty pe de f C o m o b j : : T A u to O b je c t F a c tory inhe r i te d; pub l ic :
_ fa s tc a ll T A c tiv e X C o n tro lF a c to ry ( C o m o b j::T C o m S e rv e r O b je c t* C o m S e rv e r ,
T M e ta C la s s * A c tiv e X C o n tro lC la ss , S y s te m :: T M e ta C la s s * W in C o n tro l C la s s , c o n s t G U ID & C la s s ID , in t T o o lb o x B itm a p ID , c o n s t A n s i S tr in g L ic S tr , in t M is c S ta tu s ) ;
_fa s tc a l l v ir tua l ~ T A c t iv e X C o n tro l F a c tory ( vo id);
vo id _ fa s tc a l l A ddV e rb ( in t V e rb , c ons t S y s te m : : A n s i S tr ing V e rb N a m e ) ; v ir tu a l v o id _ fa s tc a ll U p d a te R e g is try ( b o o l R e g is te r ) ;
_p rop e r ty G U ID E v e n t I ID ;
_p rop e r ty _d i_ IT y pe In fo E v e n t T y p e Info;
_p rop e r ty in t M is c S ta tus ;
_p rop e r ty in t T oo lbo xB i tm a p ID ;
_ p ro p e rty S y s te m ::T M e ta C la s s * W in C o n tro lC la s s ;
};
E v e n t II D 特 性
声 明 _prope r ty G U ID E v e n t I ID ;
这 个 只 读 的 特 性 返 回 A c tiv e X 控 件 的 事 件 接 口 的 GU ID
E v en t Ty p eI n fo 特 性
声 明 _prope r ty _d i_ IT y pe In fo E v e n t T y p e Info;
这 个 只 读 的 特 性 返 回 A c tiv e X 控 件 的 事 件 接 口 的 类 型 信 息
M is c S ta tu s 特 性
声 明 _prope r ty in t M is c S ta tus ;
这 个 只 读 的 特 性 返 回 注 册 表 中 CL S ID 键 值 下 的 条 目
To o lbo x B itm a p I D 特 性
声 明 _prope r ty in t T oo lboxB i tm a pID ;
这 个 只 读 的 特 性 返 回 用 于 代 表 A c tiv e X 控 件 的 图 标 的 资 源 ID
W in C on tro lC las s 特 性
声 明 _prope r ty S y s te m : : T M e ta C la s s * W inC on tro l C la s s ;
用 A c tiv e X 框 架 可 以 把 一 个 基 于 VC L 的 控 件 转 换 为 A c tiv e X 控 件 这 个 只 读 的特 性 返 回 对 应 的 VC L 控 件
A dd Ve r b 函 数
声 明 v o id _ fa s tc a ll A d d V e rb ( in t V e rb , c o n s t S y s te m ::A n s iS trin g V e rb N a m e ) ; 用 鼠 标 右 键 单 击 A c tiv e X 控 件 将 弹 出 一 个 快 捷 菜 单 该 菜 单 上 的 命 令 也 称动 作 就 是 通 过 这 个 函 数 事 先 设 置 的 其 中 V e rb 参 数 是 个 整 数 用 于 设 置动 作 的 编 号 自 定 义 的 动 作 通 常 设 为 正 数 C+ + Bu ild e r 3 预 定 义 了 一 些 动 作 ( 负 数 或 零 )
-
OL E IVE R B _ P R IM AR Y
-
O LE IV E R B _ S H O W
-
OL E IVE R B _ OP E N
-
OL E IVE R B _ H IDE
-
OL E IVE R B _ U IAC T IVAT E
-
OL E IVE R B _ IN P L AC E A C T IVAT E
-
OL E IVE R B _ D IS C AR DU ND OS T A T E
-
O LE IV E R B _ P R O P ER T IES
V e rb N a m e 参 数 是 个 字 符 串 用 于 设 置 动 作 名 实 际 上 就 是 出 现 在 快 捷 菜 单中 的 命 令 名 字 符 串 中 可 以 出 现 & 符 号 & 符 号 后 面 的 那 个 字 符 将 带 下 划 线显 示
TA c tiv e X C o n tro lF a c to r y 的 构 造 函 数
声 明 _ fas tc all
T A ctiv eX C o n tro l F acto ry( C o m o b j :: T C o m S erv e r O b je c ∗ Co m S e rv e r , S y s te m : : T M etaC la s s ∗ A c tiv eX C o n tro l C la s s , S y s tem : : T M etaC la s s ∗ W inC on tro l C la s s , c ons t G U ID & C la s s - ID , in t T oo lboxB itm a pID , c ons t S y s te m :: A n s i S tr ingL ic S tr , in t M is c S ta tu s ) ;
这 个 构 造 函 数 用 于 创 建 类 工 厂 的 实 例 其 中 Co m S e rv e r参 数 用 于 指 定 CO M
服 务 器 通 常 设 为 Co m S e rv 单 元 中 的 全 局 变 量 Co m S e rv e r
A c tiv e X C o n tro lC la s s 参 数 是 A c tiv e X 控 件 的 类 名 它 是 从 T A ctiv eX C o n tro l 继承 下 来 的 W inC on tro l C la s s 参 数 用 于 指 定 VC L 控 件 的 类 名 它 是 从T W in C on tro l继 承 下 来 的 C la ssID 参 数 用 于 指 定 A c tiv e X 控 件 的 GU ID L ic S tr 参 数 是 A c tiv e X 控 件 的 许 可 字 符 串 如 果 A c tiv e X 控 件 不 需 要 进 行 许 可 检 查
L ic S tr参 数 可 以 设 为 空 M is c S ta tu s 参 数 用 于 设 置 存 储 到 注 册 表 中 的 状 态 位
U pda te R e g is tr y 函 数
声 明 v ir tua l vo id _fa s tc a ll U pda te R e g is try ( boo l R e g is te r ) ;
这 个 函 数 用 于 在 注 册 表 中 注 册 A c tiv e X 控 件 或 撤 消 注 册 如 果 R e g is te r参 数 设为 T ru e 表 示 要 进 行 注 册 如 果 R e g is te r参 数 设 为 Fa ls e 表 示 要 撤 消 注 册
一 般 不 需 要 重 载 这 个 函 数 除 非 您 想 在 注 册 表 中 存 储 更 多 的 信 息 如 果 要重 载 这 个 函 数 并 且 R e g is te r参 数 设 为 T ru e 首 先 要 调 用 Inhe r i te d 如 果 R e g is te r 参 数 设 为 Fa ls e 要 在 最 后 调 用 Inhe r i te d
1 7 TA ct iv eFo rm Fa ct ory
A c tiv e F o rm 可 以 理 解 为 复 合 的 A c tiv e X 控 件 也 是 典 型 的 CO M 对 象 因 此
A c tiv e F o rm 也 需 要 类 工 厂 T A ctiv eF o rm F ac to r y 就 是 T A ctiv eF o rm 的 类 工 厂 在 A x C tr ls 单 元 中 T A ctiv eF o rm F a c to r y 是 这 样 声 明 的 ( 按 O b ject P a s cal的 语 法声 明 )
T A ctiv eF o rm F acto ry = C las s ( T A ctiv e X C o n tro l F acto ry ) P u b lic
F unc t io n G e t In tf E n try ( G u id: T G U ID ) : P In te r fa c e E n try ; ov e r r ide ;
En d ;
可 见 T A ctiv eF o rm F acto r y 是 从 T A c tiv e X C o n tro lF a c to r y 继 承 下 来 的 重 载 了
G e t In tf E n tr y 函 数
至 此 A c tiv e X 框 技 术 已 经 全 部 介 绍 完 毕 也 许 有 的 读 者 会 觉 得 上 述 内 容 很深 奥 不 太 好 理 解 事 实 上 的 确 如 此 读 者 只 有 深 刻 领 会 了 C+ + Bu ild e r 3 面向 对 象 的 编 程 思 想 以 及 对 象 接 口 的 语 法 才 能 真 正 掌 握 A c tiv e X 框 架 的结 构 和 精 髓