2

プロジェクトの1つでこのスーパーオブジェクトユニットをrpcプロトコルとして使用しており、リモート呼び出しプロシージャ(署名にはvar Result 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.
4

1 に答える 1

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.
于 2013-03-03T13:47:37.450 に答える