在SuperObject中使用Result arg

时间:2013-03-03 12:00:42

标签: delphi superobject

我在我的一个项目中使用这个superobject单元作为rpc协议,并且在远程调用过程中(签名有一个var Result arg)我想知道如何使用该arg ......

是不是有文件?感谢。

program test_rpc;

{$IFDEF FPC}
  {$MODE OBJFPC}{$H+}
{$ELSE}
  {$APPTYPE CONSOLE}
{$ENDIF}

uses
  SysUtils, superobject;

procedure controler_method1(const This, Params: ISuperObject; var Result: ISuperObject);
var
  i: Integer;
begin
  write('action called with params ');
  writeln(Params.AsString);

  try
    // How do i use Result arg to return a value ? as if it were a function returning string
    Result
  except
    exit;
  end;
end;

var
  s: ISuperObject;
begin
  s := TSuperObject.Create;
  s.M['controler.action1'] := @controler_method1;
  try
    s['controler.action1("HHAHAH")'];
  finally
    s := nil;
    writeln('Press enter ...');
    readln;
  end;
end.

1 个答案:

答案 0 :(得分:3)

调用controler_method1时,var参数Resultnil。要将某些内容返回给调用者,您需要将其分配给Result

Result := TSuperObject.Create;

这是一个空的超级对象。现在,您可以使用您喜欢的任何值以正常方式填充它。

这是一个简单的演示:

program test_rpc;

{$IFDEF FPC}
  {$MODE OBJFPC}{$H+}
{$ELSE}
  {$APPTYPE CONSOLE}
{$ENDIF}

uses
  SysUtils,
  superobject in 'superobject.pas';

procedure controler_method1(const This, Params: ISuperObject;
    var Result: ISuperObject);
begin
  Result := TSuperObject.Create('Foo');
end;

var
  s: ISuperObject;
begin
  s := TSuperObject.Create;
  s.M['controler.action1'] := controler_method1;
  Writeln(s['controler.action1("HHAHAH")'].AsString);
  Readln;
end.