2

我正在尝试进行回调,发送不同的对象类型和对象的一些额外信息。所以我做了这门课:

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

在不同的情况下,我在 Obj 字段中创建不同的对象,但执行 DSServer.BroadcastObject "Internal: Cannot instantiate object ..." 时总是收到错误消息

这是我非常简单的例子: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;

现在它应该可以工作了。

一种更简洁的方法是为每个类使用一个空的注册类方法。如下:

  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 回答