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

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


在不同的情况下,我在Obj字段中创建了不同的对象,但是在执行DSServer.BroadcastObject“内部:无法实例化对象...”时,总是收到错误消息。

这是我真正简单的示例:http://www.4shared.com/file/fONlAGM3/DataSnapExample.html

请查看示例,并告诉我有什么问题...

最佳答案

在客户端,对象类不在可执行文件中。
可以肯定的是,请尝试进行此脏检查。在客户端代码中创建引用所用类的引用。
例如。

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.

10-07 14:05
查看更多