Delphi数据快照方法类 - 覆盖创建构造函数

时间:2015-02-19 08:56:30

标签: delphi datasnap

重要我正在使用Delphi XE 7

我是数据快照的新手,我在菜单中设置了一个数据快照服务器和客户端,旁边是youtube的简短教程

服务器和客户端应用程序相互协作。但是在我的服务器方法单元(包含客户端可以调用的所有函数的单元)中我试图初始化我在类中创建的变量(将一些整数设置为0等)。

我试图覆盖constructor create,但似乎永远不会被调用。 我已使用virtualoverrideoverload对其进行了标记,但它们似乎都没有执行此代码:

constructor TServerMethods1.create(AOwner: TComponent);
  begin
      messagedlg('worked', mtError, [mbOk], 0);
      inherited;
    end;

我原本在那里有变量,但我发现它没有执行。 我错过了什么或者它永远不会执行,如果它永远不会执行客户端如何调用方法。

编辑 - 这是类声明:

type
  tPlayer = record
    PlayerName: String;
    Spot: Integer;
  end;

{$METHODINFO ON}

  TServerMethods1 = class(TComponent)

    TmrGameStarted: TTimer;
  private
    { Private declarations }

    fSpot1Taken: Boolean;
    fSpot2Taken: Boolean;
    fSpot3Taken: Boolean;
    fSpot4Taken: Boolean;
    fSpot5Taken: Boolean;

    Player: Array [1 .. 5] of tPlayer;

    fGameStarted: Boolean;

  public
    { Public declarations }

    fPlayerCount: Integer;

    constructor create(AOwner: TComponent); overload;

    function getPlayerCount: Integer;
    procedure setPlayerCount(i: Integer);
    function EchoString(Value: string): string;
    function ReverseString(Value: string): string;
    function Attempt_Join(sPlayerName: String; sPassword: String): String;
    function UpdateLog: String;
    function GameStarted: String;

  end;
{$METHODINFO OFF}

我还在constructor中添加了以下内容:

constructor TServerMethods1.create(AOwner: TComponent);
begin
  messagedlg('worked', mtError, [mbOk], 0);
  inherited create(AOwner);
end;

这是来自constructor的{​​{1}}方法,它是公开声明System.Classes

constructor Create(AOwner: TComponent); virtual;

这也在类型声明中添加,但我不知道它做什么

{ TComponent }

constructor TComponent.Create(AOwner: TComponent);
begin
  FComponentStyle := [csInheritable];
  if AOwner <> nil then AOwner.InsertComponent(Self);
end;

构造方法:

private class var
    FComparer: IComparer<TComponent>;
    class constructor Create;

1 个答案:

答案 0 :(得分:0)

好。我找到了问题的答案。 on create甚至触发,但每次客户端调用函数时都会触发

在做了一些更多的研究后,似乎没有一种实际的方法可以从表单或应用程序中操作服务器方法。

根据您的需要,Datasnap可能很有用。在我的情况下,我以不正确的方式使用它。要使用create构造函数,只需添加override指令即可。这将覆盖默认的父构造函数并执行您的构造函数。