gpt4 book ai didi

delphi - 在 SuperObject 中使用 Result arg

转载 作者:行者123 更新时间:2023-12-03 18:32:31 27 4
gpt4 key购买 nike

我在我的一个项目中使用这个 super 对象单元作为 rpc 协议(protocol),在一个远程调用过程中(签名有一个 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.

最佳答案

controler_method1被称为 var参数Resultnil .要将某些内容返回给调用者,您需要分配给 Result .

Result := TSuperObject.Create;

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

这是一个简单的演示:
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.

关于delphi - 在 SuperObject 中使用 Result arg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185421/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com