1. DispatchHelper

平台上访问接口都是通过DispatchHelper实现的,通过创建DispatchHelper的实例,调用这个实例的方法来访问接口的属性或者调用接口的方法。

1.1. 相关属性和方法

  1. constructor create(idispatch: TObject); overload;
    创建接口对象的实例

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

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

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

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

1.2. 用法示例

  1. 调用现有控件的接口

   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. 创建新的接口,然后调用接口的方法和属性

   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来代替

  1. 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. 平台代码:

   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;


ThisCategory

[[PageComment2()]]

DispatchHelper (last edited 2007-08-29 08:56:47 by alang)