我在我的一个项目中使用这个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.
答案 0 :(得分:3)
调用controler_method1
时,var
参数Result
为nil
。要将某些内容返回给调用者,您需要将其分配给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.