2

さまざまなオブジェクト タイプとオブジェクトの追加情報を送信して、コールバックを作成しようとしています。だから私はこのクラスを作りました:

  TCallBackObject = class
    Sender : string;
    ObjectClass : string;
    Obj : TObject;
    Status : integer;
    ID : integer;
  end;

さまざまな状況で、Obj フィールドにさまざまなオブジェクトを作成しますが、DSServer.BroadcastObject を実行すると、「内部: オブジェクトをインスタンス化できません ...」というエラー メッセージが常に表示されます。

これが私の本当に簡単な例です: http://www.4shared.com/file/fONlAGM3/DataSnapExample.html

例を見て、何が間違っているのか教えてください...

4

1 に答える 1

2

クライアント側では、オブジェクト クラスは実行可能ファイルにありません。念のため、このダーティ チェックを試してください。使用するクラスを参照する参照をクライアント コードに作成します。例えば。

TForm6 = class(TForm)
  SQLConnection1: TSQLConnection;
  DSClientCallbackChannelManager1: TDSClientCallbackChannelManager;
  Button1: TButton;
  Label1: TLabel;
  Label2: TLabel;
  procedure Button1Click(Sender: TObject);
  procedure OnExecute(AValue: TObject);
private
  c: TCat; //dummy refernce to the class
  d: TDog;  //dummy refernce to the class
  co: TCAllbackObject; //dummy refernce to the class
public
  { Public declarations }
end;

これで動作するはずです。

よりクリーンな方法は、クラスごとに空の register クラス メソッドを使用することです。次のように:

  TCallBackObject = class
    Sender: string;
    ObjectClass: string;
    Obj: TObject;
    Status: integer;
    ID: integer;
    class procedure Register;
  end;
  ...
  class procedure TCallBackObject.Register;
  begin
    //
  end;

  initialization

    TCallBackObject.Register;

end.
于 2011-12-15T09:48:53.770 に答える