Da ist noch ein Bug:
Delphi-Quellcode:
try
FFTPClient.Connect;
except
on E:
Exception do begin
// FMsg ist ein Zeiger (PChar)
FMsg := PChar('
Fehler bei der Verbindungsaufnahme ('+e.
Message+'
)');
Synchronize( OnMessage );
FFTPClient.Disconnect;
FFTPClient.Quit;
exit;
// auf was wird der Zeiger wohl zeigen, wenn die Methode verlassen wird?
// -> auf ungültigen Speicher !!
// und was passiert dann in der Procedure OnMessage?
// -> ungültiger Speicher wird ausgelesen
// weil ja zuerst "exit" ausgeführt wird und wegen dem Synchronize-Aufruf
// die Procedure OnMessage danach abgearbeitet wird
end;
end;
Nachtrag:
da sind ZWEI Bugs.
Der 2. Bug ist der Aufruf von
Delphi-Quellcode:
FFTPClient.Disconnect;
FFTPClient.Quit;
Wenn man eine aktive
FTP-Verbindung beenden möchte schickt man zuerst QUIT und danach kommt der Disconnect.
Also ist die Reihenfolge falsch.
Aber, da der Connect ja sowieso nicht geklappt hat, ist es unlogisch die Verbindung beenden zu wollen.