EventApp对象模型

当前位置:首页>EventApp>EventApp对象模型

EventApp对象模型

## 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