Warum hörst du nicht auf die Warnungen des Compilers?
Delphi-Quellcode:
try
Netclient_Checker := TNetHTTPClient.Create(self);
...
finally
Checkup_ready := TRUE;
Netclient_Checker.Free; //Ebenfalls mit FreeAndNil versucht weil ich ein unsauberes Schließen im Verdacht hatt
end;
Hier sollte er meckern, dass diese Variable nicht initialisiert sei, was so auch richtig ist, denn wenn es im Create knallt, dann bekommt Free eine "zufällige" Variable.
Also ja, dein Verdacht könnte schon stimmen, nur ist das Free/FreeAndNil nicht der Fehler, sondern alles davor.
Selbst wenn es erst im Free und nicht schon im Create knallt, dann nur, weil vorher schon etwas falsch war.
Das Create gehört vor das Try. (oder notfalls muß es vorher zumindestens initialisiert werden)
Delphi-Quellcode:
obj := TIrgendwas.Create;
try
...
finally
obj.Free;
end;
Delphi-Quellcode:
obj := nil;
try
...
obj := TIrgendwas.Create;
...
finally
obj.Free; // im Free ist ein if-Assigned integriert
end;
Und dann greifst du auch noch multithreaded auf die nicht-threadsafe
VCL zu.
Das
Self gehört hier niemals in einen Thread.
Create des TComponent registriert sich bei seinem Owner (schreibt dort also aus einem Thread in eine Komponenten-Liste) und beim Free nochmal, um sich aus dieser Liste zu löschen.
->
Netclient_Checker := TNetHTTPClient.Create(nil);
Und solche Try-Except, mit "schwachsinniger" Fehlerbehandlung, gehören verboten.
Warum wird die eigentliche
Exception.Message grob fahrlässig vernichtet?
Zitat:
Response_msg := Translate('IP nicht erreichbar');
Was wäre, wenn die
IP erreichbar ist, aber es einen anderen Fehler gab?