在客户端的datasnap应用程序中,我显然有一个clientmodule。关闭我的申请时收到错误:
ERROR 根据调试器的功能:
destructor TClientModule1.Destroy;
begin
FServerMethods1Client.Free;
inherited;
end;
compiller显示:
$ 0059ABC4的第一次机会异常。异常类$ C0000005,消息'访问冲突位于0x0059abc4:读取地址0x00000034'。处理Cajero.exe(1856)
答案 0 :(得分:0)
根据你的截图,你得到一个低地址$ 34的AV,表示你正在对象引用上的方法是零。
试试这个虚拟代码
procedure TForm22.FormCreate(Sender: TObject);
begin
TForm(nil).Next;
end;
看看AV上的地址。
当您尝试在对象上调用方法时,编译器会在名为VMT的表中查找该方法的偏移量。此值将添加到对象引用的地址中。
在您的代码中,您有property
名为ServerMethods1Client
,其定义如下:
property ServerMethods1Client: TServerMethods1Client read GetServerMethods1Client write FServerMethods1Client;
尝试将其更改为只读属性
property ServerMethods1Client: TServerMethods1Client read GetServerMethods1Client;
然后编译器会告诉你在哪里为你的财产分配一个零值。