起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 554|回复: 0

[分享]DispatchHelper**

[复制链接]
发表于 2008-8-25 16:07:47 | 显示全部楼层 |阅读模式
平台上访问接口都是通过DispatchHelper实现的,通过创建DispatchHelper的实例,调用这个实例的方法来访问接口的属性或者调用接口的方法。

1.1. 相关属性和方法
constructor create(idispatch: TObject); overload;
创建接口对象的实例

function InvokeMethod(Name: string; Params: array of TObject): TObject; overload;
调用接口的Name方法,用Params作为参数

function InvokeMethod(Name: string; ParamsByRef: array of Boolean; Params: array of TObject): TObject; overload;
调用接口的Name方法,用ParamsByRef作为传值参数,用Params作为传参参数

function PropertyGet(Name: string; Params: array of TObject): TObject; overload;
获取接口的Name属性值作为函数返回值

procedure PropertyPut(Name: string; Params: array of TObject); overload;
设置接口的Name属性值


1.2. 用法示例
调用现有控件的接口

切换行号显示
   1 var
   2   doc: System.DispatchHelper;
   3   app: System.DispatchHelper;
   4   sel: System.DispatchHelper;
   5 begin
   6   dbedtContent.DataSource.DataSet.Edit;
   7   TOleContainer(dbedtContent.InplaceControl).DoVerb(0);     //字段数据类型为二进制,表现类型为OLE.
   8   doc := System.DispatchHelper.Create(TOleContainer(dbedtContent.InplaceControl).OleObject);
   9   app := System.DispatchHelper.Create(doc.PropertyGet('Application', []));
  10   app.PropertyPut('UserName', [edtAuthor.Text]);   //设置用户名.
  11   app.PropertyPut('UserInitials', ['alang']);    //设置用户简称.
  12   doc.PropertyPut('TrackRevisions', [True]);   //设置痕迹保留.
  13 end;
创建新的接口,然后调用接口的方法和属性

切换行号显示
   1 var
   2   o:   Object;   
   3   app, docs, doc: System.DispatchHelper;
   4 begin   
   5   //创建接口对象o
   6   o   := ComObj.CreateOleObject('Word.Application');   
   7   //根据接口对象o创建接口app
   8   app := System.DispatchHelper.Create(o);
   9   app.PropertySet('Visible', [False]);
  10   docs := System.DispatchHelper.Create(app.PropertyGet('Documents',  []);
  11   docs.InvokeMethod('Open', []);
  12   ...
  13   //释放接口对象。
  14   (o as System.IDisposable).Dispose;
  15 end;

1.3. FAQ

1.3.1. EmptyParam如何在平台上表示
在Delphi中经常用EmptyParam作为一个用不到的参数在接口函数中用到,在平台上可以用nil来代替

Delphi代码

切换行号显示
   1 var
   2   word: OleVariant;
   3 begin
   4   word := CreateOleObject('Word.Application');
   5   ShowMessage('before quit');
   6   word.Quit(EmptyParam, EmptyParam, EmptyParam);
   7   ShowMessage('after quit');
   8 end;
平台代码:

切换行号显示
   1 var
   2   o: Object;
   3   word: System.DispatchHelper;
   4 begin
   5   o := ComObj.CreateOleObject('Word.Application');
   6   word := System.DispatchHelper.Create(o);
   7   Dialogs.ShowMessage('before quit');
   8   word.InvokeMethod('Quit', [nil, nil, nil]);
   9   Dialogs.ShowMessage('after quit');
  10   (o as System.IDisposable).Dispose;
  11 end;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 23:00 , Processed in 0.034899 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表