## 2. COM 类层次结构
### 2.1 总体架构
```
┌─────────────────────────────────────────────────────────────────────────┐
│ loquat.EventApp.dll │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────────┐ │
│ │ EventApp (CoClass) │ │
│ │ - 对象集合管理 │ │
│ │ - 事件绑定入口 │ │
│ └─────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────┼────────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ ObjectInfo │ │ Interfaces │ │ EventInterfaces │ │ │
│ │ (对象信息) │ │ (接口集合) │ │ (事件接口集合) │ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.2 EventApp 主类(ProgId=loquat.EventApp)
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ EventApp │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Count - 已添加对象数量 (只读) │
│ │
│ 集合方法: │
│ Add(Key, obj) - 添加后期绑定对象到EventApp里,返回ObjectInfo (Key不能重复) │
│ Item(KeyOrIndex) [默认] - 返回 ObjectInfo (Index从1开始) │
│ Remove(KeyOrIndex) - 从EventApp移除对象 │
│ Clear() - 从EventApp清空所有对象 │
│ │
│ 独立方法: │
│ CreateObjectEx(...) - 从文件创建 COM 对象,同导出函数 │
│ SetEventCallback(...) - 绑定单个事件回调 (原生参数) ,同导出函数 │
│ SetGenericEventCallback(...) - 绑定通用事件回调,同导出函数 │
│ GetSignatures(...) - 获取事件签名,同导出函数 │
│ UnbindEvent(cookie) - 解绑事件,同导出函数 │
│ │
│ 事件源: │
│ [source] IGenericEvents - 通用事件接口 │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.3 ObjectInfo 类
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ ObjectInfo │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Name - 对象原始 ClassName (只读) │
│ Key - 添加时的 Key (只读) │
│ Index - 索引位置,序号 (只读) │
│ Object - 返回原始对象的引用 │
│ Interfaces - 返回普通接口集合 │
│ EventInterfaces - 返回事件接口集合 │
│ HelpInfo - 返回帮助信息对象 │
│ CustDatas - 返回自定义数据集合 │
│ │
│ 方法: │
│ Me / Self - 返回 ObjectInfo 自身 │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.4 Interfaces 集合
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ Interfaces 普通接口集合 │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Count - 接口数量 (只读) │
│ │
│ 方法: │
│ Item(KeyOrIndex) [默认] - 返回 Interface (Index从1开始) │
│ 支持 For Each 遍历 │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ Item(KeyOrIndex)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ Interface 普通接口 │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Name - 接口名称 │
│ IID - 接口 GUID 字符串 │
│ FlagValue - Flag 数值 │
│ FlagName - Flag 名称 (多个用"|"分隔) │
│ IsDefault - 是否 coclass 默认接口 │
│ Members - 返回成员集合 │
│ HelpInfo - 返回帮助信息对象 │
│ CustDatas - 返回自定义数据集合 │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.5 Members 集合
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ Members │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Count - 成员数量 (只读) │
│ │
│ 方法: │
│ Me / Self - 返回 Members 自身 │
│ Item(KeyOrIndex) [默认] - 返回 MemberInfo (Index从1开始) │
│ Signatures(iType, [KeyOrIndex])- 返回签名 (VB6=0/C=1/JSON=2) │
│ 支持 For Each 遍历 │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ Item(KeyOrIndex)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ MemberInfo │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Name - 成员名称 │
│ Address - vtable 真实地址 (指针) │
│ Index - vtable 偏移 (从0开始) │
│ DispId - Member ID │
│ InvokeKind - 调用类型 (Method/PropertyGet/Put/PutRef) │
│ InvokeKindName - 调用类型名称 │
│ CallConv - 调用约定数值 │
│ CallConvName - 调用约定名称 │
│ ParamCount - 参数个数 │
│ ReturnTypeValue - 返回类型数值 │
│ ReturnTypeName - 返回类型名称 │
│ Parameters - 返回参数集合 │
│ HelpInfo - 返回帮助信息对象 │
│ CustDatas - 返回自定义数据集合 │
│ │
│ 方法: │
│ Me / Self - 返回 MemberInfo 自身 │
│ Signature(iType) - 本成员签名 (VB6=0/C=1/JSON=2) │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.6 EventInterfaces 集合
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ EventInterfaces │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Count - 事件接口数量 (只读) │
│ │
│ 方法: │
│ Item(KeyOrIndex) [默认] - 返回 EventInterface (Index从1开始) │
│ 支持 For Each 遍历 │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ Item(KeyOrIndex)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ EventInterface │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Name - 事件接口名称 │
│ IID - 事件接口 GUID 字符串 │
│ FlagValue - Flag 数值 │
│ FlagName - Flag 名称 │
│ IsDefault - 是否默认事件接口 │
│ Events - 返回事件成员集合 │
│ HelpInfo - 返回帮助信息对象 │
│ CustDatas - 返回自定义数据集合 │
└─────────────────────────────────────────────────────────────────────────────┘
```
### 2.7 Events 集合
```
┌─────────────────────────────────────────────────────────────────────────────┐
│ Events │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Count - 事件数量 (只读) │
│ │
│ 方法: │
│ Me / Self - 返回 Events 自身 │
│ Item(KeyOrIndex) [默认] - 返回 EventInfo (Index从1开始) │
│ Signatures(iType, [KeyOrIndex])- 返回事件签名 │
│ SetGenericEventCallback(...) - 绑定所有事件 (JSON 格式)(返回 Cookie) │
│ Advise() - 绑定所有事件到 OnEventAll (返回 Cookie) │
│ UnAdvise(Cookie) - 解绑 OnEventAll │
│ 支持 For Each 遍历 │
│ │
│ 事件源: │
│ [source] IEventsEvent - 包含 OnEventAll 事件 │
└─────────────────────────────────────────────────────────────────────────────┘
│
│ Item(KeyOrIndex)
▼
┌─────────────────────────────────────────────────────────────────────────────┐
│ EventInfo │
├─────────────────────────────────────────────────────────────────────────────┤
│ 属性: │
│ Name - 事件名称 │
│ Address - vtable 真实地址 (指针) │
│ Index - vtable 偏移 (从0开始) │
│ DispId - 事件 ID │
│ CallConv - 调用约定数值 │
│ CallConvName - 调用约定名称 │
│ ParamCount - 参数个数 │
│ ReturnTypeValue - 返回类型数值 │
│ ReturnTypeName - 返回类型名称 │
│ Parameters - 返回参数集合 │
│ HelpInfo - 返回帮助信息对象 │
│ CustDatas - 返回自定义数据集合 │
│ │
│ 方法: │
│ Me / Self - 返回 EventInfo 自身 │
│ Signature(iType) - 本事件签名 │
│ Advise() - 绑定本事件到 OnEventOne (返回 Cookie) │
│ UnAdvise(Cookie) - 解绑 OnEventOne │
│ │
│ 事件源: │
│ [source] IEventInfoEvent - 包含 OnEventOne 事件 │
└─────────────────────────────────────────────────────────────────────────────┘
```
方便理解的简化对象模型
EventApp
----ObjectInfo
--------Interfaces
------------Interface
----------------Members
--------------------MemberInfo
------------------------Parameters
----------------------------ParameterInfo
--------EventInterfaces
------------EventInterface
----------------Events
--------------------EventInfo
------------------------Parameters
----------------------------ParameterInfo
Copyright © 2025- vba.vip All Rights Reserved.