ich habe eine Anwendung aus Delphi die problemlos läuft und portiere diese gerade zu Lazarus um. Dabei bin ich mit IdTCPClient auf ein Problem gestoßen, für das ich einfach keine Lösung finde.
Das Problem tritt in dem Moment auf, wenn
Code: Alles auswählen
idTCPClient.Connect;Im Anschluss ist die Anwendung beendet. Lt. Ereignisanzeige ist der Ausnahmecode 0xc0000005. Auf der Serverseite wird die Verbindung angezeigt und direkt wieder geschlossen. Ist die Gegenstelle nicht erreichbar, wird korrekterweise ein Socketfehler angezeigt. Der Absturz passiert nur, wenn eine Gegenstelle vorhanden und erreichbar istProjekt XYZ hat Exception-Klasse >>External: ACCESS VIOLATION<< ausgelöst mit der Meldung: Access violation executing adress $0000000000000.
Merkwürdig finde ich auch, dass except den Fehler nicht abfängt!?
"Verbinden" Button:
Code: Alles auswählen
begin
IdCreate;
if not idTCPClient.Connected then
begin
try
idTCPClient.Host := ip_edit.Text;
idTCPClient.Port := StrToInt(port_edit.Text);
idTCPClient.ConnectTimeout := 5000;
IdTCPClient.ReadTimeout := 5000;
idTCPClient.Connect;
except
on E: Exception do
begin
WriteToMemo(GetDateTime + '#', 'FEHLER: ' + E.Message, clRed);
IFDisconnected;
end;
end;
end;
end;Code: Alles auswählen
idTCPClient := TIdTCPClient.Create(nil);
idTCPClient.OnConnected := @IdTCPClientConnected;
idTCPClient.OnDisconnected := @IdTCPClientDisconnected;
idThreadComponent := TIdThreadComponent.Create(nil);
idThreadComponent.OnRun := @IdThreadComponentRun; Indy ist in Version 10.6.3.11 installiert.
Lazarus Version ist 4.2
Danke und Gruß
KL