我正在尝试进行回调,发送不同的对象类型和对象的一些额外信息。所以我上了这个课:
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.