Estaba haciendo un server para actualización de archivos para un grupo de trabajo, tengo el server y el cliente.
Las conexiones se listan en un ListView dentro de la propiedad Data del Socket guardo un puntero a el Item agregado y viceversa (en la variable Data de ListItem guardo el puntero al Socket), mi problema surge cuando necesito borrar el item de la lista. Les dejo el codigo.
Código:
procedure TfrmMain.sockMainClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
TListItem(Socket.Data).Delete;
lvConnection.Update;
ErrorCode := 0;
//TListItem(Socket.Data).Update;
end;
procedure TfrmMain.sockMainClientRead(Sender: TObject; Socket: TCustomWinSocket);
var sTemp: String;
asSplit: AString;
liSubItem: TListItem;
begin
sTemp := Socket.ReceiveText;
asSplit := uFunction.Split(sTemp, '|');
if asSplit[0] = 'START' then begin
liSubItem := lvConnection.Items.Add;
Socket.Data := @liSubItem;
liSubItem.Data := @Socket;
end;
end;
Cuando se obtiene un error o se desconecta lo debería eliminar de la lista pero no lo hace, estuve buscando pero no encontre mucho, intente con el operador "^" y nada incluso con Destroy y Free, pero me devuelve un EAccess Violation
Saludos!