Delphi XE2 Datasnap Callback - PullRequest
       16

Delphi XE2 Datasnap Callback

2 голосов
/ 15 декабря 2011

Я пытаюсь сделать обратный вызов, отправив различные типы объектов и некоторую дополнительную информацию для объектов.Итак, я создал этот класс:

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

В разных ситуациях я создаю разные объекты в поле Obj, но всегда получаю сообщение об ошибке при выполнении DSServer.BroadcastObject "Internal: Cannot instanceinate object ..."

Вот мой действительно простой пример: http://www.4shared.com/file/fONlAGM3/DataSnapExample.html

Пожалуйста, посмотрите пример и скажите мне, что не так ...

1 Ответ

2 голосов
/ 15 декабря 2011

На стороне клиента классы объектов не находятся в исполняемом файле.Чтобы быть уверенным, попробуйте эту грязную проверку.Создайте в коде клиента ссылку на используемые классы.например.

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.
...