我用的是d2007,indy10,我想在服务端用一个按钮来关闭一个客户的连接,但总是报下面这个错误:第一次发生异常在 $7C812AFB.异常类 EAccessViolation 消息 'Access violation at address 7C93AC4A in module 'ntdll.dll'. Write of address 00000010'. 进程 Server.exe (1356),我的代码是这样的:
procedure TForm1.IdTCPServerDisconnect(AContext: TIdContext);
var
Client: TUser;
begin
Client := TUser(AContext.Data);
if Client <> nil then
begin
Client.Lock;
try
Client.Context := nil;
finally
Client.Unlock;
end; FUsers.Remove(Client);
SendMessage(FormHanlde, WM_REFRESH_USERS, Ord(rpDeleteItem), Integer(Client));
Client.Free;
end;
end;procedure TForm1.CloseClient1Click(Sender: TObject);
var
clienttxt : TUser;
begin
clienttxt:= TUser(lvUsers.Selected.Data);
IdTCPServerDisconnect(clienttxt.Context);
end;
procedure TForm1.IdTCPServerDisconnect(AContext: TIdContext);
var
Client: TUser;
begin
Client := TUser(AContext.Data);
if Client <> nil then
begin
Client.Lock;
try
Client.Context := nil;
finally
Client.Unlock;
end; FUsers.Remove(Client);
SendMessage(FormHanlde, WM_REFRESH_USERS, Ord(rpDeleteItem), Integer(Client));
Client.Free;
end;
end;procedure TForm1.CloseClient1Click(Sender: TObject);
var
clienttxt : TUser;
begin
clienttxt:= TUser(lvUsers.Selected.Data);
IdTCPServerDisconnect(clienttxt.Context);
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货