如何将VBA的Attachmate Reflection对象声明转换为Delphi声明
VBA代码转Delphi实现方案
- 先确认项目已引入导入TLB生成的对应单元,同时在uses列表中加入Delphi自带的
ComObj单元用于COM对象操作。 - 完整转换后的代码如下:
var // 对应VBA的对象声明,直接使用TLB导入生成的接口类型 app: Attachmate_Reflection_Objects_Framework.ApplicationObject; terminal: Attachmate_Reflection_Objects_Emulation_IbmHosts.ibmTerminal; view: Attachmate_Reflection_Objects.view; frame: Attachmate_Reflection_Objects.frame; begin // 对应VBA的GetObject,获取已运行的Reflection Workspace实例 app := GetActiveOleObject('Reflection Workspace') as Attachmate_Reflection_Objects_Framework.ApplicationObject; // 后续对象获取逻辑和VBA完全对应,直接调用接口方法即可 frame := app.GetObject('Frame') as Attachmate_Reflection_Objects.frame; view := frame.SelectedView; terminal := view.Control as Attachmate_Reflection_Objects_Emulation_IbmHosts.ibmTerminal; // 此处可添加后续业务逻辑 // 使用完毕后释放COM引用 terminal := nil; view := nil; frame := nil; app := nil; end;
- 注意事项:
- 如果执行时提示找不到Reflection Workspace实例,说明目标程序未启动,可将
GetActiveOleObject替换为CreateOleObject('Reflection Workspace')主动启动新实例。 - 若导入TLB后对应命名空间的类型名称有变化,以TLB生成单元中实际声明的类型名为准。
- 所有COM对象使用完成后务必置空释放,避免占用后台进程资源。
- 如果执行时提示找不到Reflection Workspace实例,说明目标程序未启动,可将
内容的提问来源于stack exchange,提问作者jimsweb
相关产品推荐
相关产品推荐

