![]() |
Probleme mit Exceptionbehandlung
Hallo Leute!
Ich habe ein Problem bei der Behandlung einer Exception. Ich benutze die Internetkomponenten Clientsocket und Serversocket, um eine Verbindung zwischen zwei Rechner herzustellen. Soweit funktioniert auch alles. Problem: Kann eine Verbindung aus irgend einem Grund nicht hergestellt werden, so wird eine Exception der Klasse ESocketError durch das System generiert. Damit das nicht durch das System passiert(was eine Fortsetzung des Programmes verhindert) fange ich diese Exception ab. Das Problem dabei ist allerdings, das der Rest der Procedur nicht weiter ausgeführt wird. Quelltext anbei procedure Tfrm_Client.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin case ErrorCode of 10049: raise ESocketError.Create('Sie haben eine ungültige Adresse eingegeben.' + ' Beachten sie bitte, dass eine IP - Adresse folgender schreibweise unterliegt.' + ' XXX.XXX.XXX.XXX' + #10#13 + 'z.B.: 172.0.0.1'); 10061: raise ESocketError.Create('Die Serveranwendung läuft nicht auf dem angegebenen Server, oder die Portnummer ist falsch.!'); 10065: raise ESocketError.Create('Es besteht keine Verbindung zum Netz.'); end; Ab hier wird nach dem Aufrufen der Exception nicht mehr ausgeführt!!! Memo_Client.Lines.Add('Verbindung zu ' + stralledaten[i].aDomain + ' fehlgeschlagen!'); Memo_Client.Lines.Add(' '); inc(i); cmd_ProcessBeginClick(nil); end; |
sobald du raise ....
ausführst wird das Programm bzw die Procedure unterbrochen, und erst an der Stelle weitergemacht, wo diese Exception abgefangen wird. versuche doch mal um den Case Block eine Try anweisung zu setzen also so: proc .... try case .... of end; finally (was auf jeden fall ausgeführt werden soll) end; (was auf jeden fall ausgeführt werden soll) end; nach finally wird dann alles wieder normal ausgeführt. man könnte auch nur dann etwas machen wenn eine exception ausgelöst wird: proc .... try case .... of end; except (was bei einer Exception passieren soll) raise; //wiederholt die letzte Exception end; (was auf jeden fall ausgeführt werden soll, wenn kein Raise da steht!) end; |
danke läuft jetzt besser. muss dennoch ein paar verbessurngen vornehmen. danke
... sobald du raise .... ausführst wird das Programm bzw die Procedure unterbrochen, und erst an der Stelle weitergemacht, wo diese Exception abgefangen wird. durch den aufruf der exception und durch die anweisungen im finally teil bearbeite ich doch die exception (fange ich den fehler doch ab). ODER? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz