IdTCPClient mit "Access Violation"

Alle Fragen zur Netzwerkkommunikation
Antworten
KL7000F
Beiträge: 4
Registriert: Fr 4. Jan 2013, 12:37

IdTCPClient mit "Access Violation"

Beitrag von KL7000F »

Hallo,

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;
ausgeführt werden soll. Dabei wird folgende Fehlermeldung ausgegeben:
Projekt XYZ hat Exception-Klasse >>External: ACCESS VIOLATION<< ausgelöst mit der Meldung: Access violation executing adress $0000000000000.
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 ist :?

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;
IdCreate:

Code: Alles auswählen

    idTCPClient                 := TIdTCPClient.Create(nil);
    idTCPClient.OnConnected     := @IdTCPClientConnected;
    idTCPClient.OnDisconnected  := @IdTCPClientDisconnected;
    idThreadComponent           := TIdThreadComponent.Create(nil);
    idThreadComponent.OnRun     := @IdThreadComponentRun; 
Randbemerkungen:

Indy ist in Version 10.6.3.11 installiert.
Lazarus Version ist 4.2

Danke und Gruß
KL

Benutzeravatar
Zvoni
Beiträge: 468
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: IdTCPClient mit "Access Violation"

Beitrag von Zvoni »

Access violation executing adress $0000000000000.
i.d.R. ist das ein Hinweis, dass du auf einen Nil-Pointer zugreifst.
Heisst: Irgendein ein "Create" ist fehlgeschlagen.

Ich sehe, du erstellst alles im Code.
Schon mal probiert die visuellen komponeten auf das Formular zu werfen, und dort alle Eigenschaften zu setzen?
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1700
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: IdTCPClient mit "Access Violation"

Beitrag von fliegermichl »

Du kannst das Projekt mi der Option -gw3 kompilieren. Dabei werden auch alle verwendeten Packages mit Debuggerinformationen übersetzt und du kannst nachvollziehen, wo genau das Problem auftritt.
Option -gw3
Option -gw3
gw3.png (45.46 KiB) 113 mal betrachtet

KL7000F
Beiträge: 4
Registriert: Fr 4. Jan 2013, 12:37

Resolved: IdTCPClient mit "Access Violation"

Beitrag von KL7000F »

Hallo,

vielen Dank für eure Antworten.

Der Fehler ist gefunden und war nicht, wie anfangs vermutet, im Bereich des Verbindungsaufbau. Das Problem war eine in Delphi vorhandene globale Variable, die in Lazarus scheinbar nicht vorhanden ist, so lange sie nicht initialisiert wurde. Scheinbar wurde das nicht als Fehler erkannt.

Jetzt geht's! 8)

Danke nochmal!

Antworten