Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Exception verlassen? (https://www.delphipraxis.net/193371-exception-verlassen.html)

SearchBot 21. Jul 2017 18:23

Delphi-Version: 10 Berlin

Exception verlassen?
 
Hallo,

ich habe da ein seltsames Phänomen...

Ich nutze die ComPort-Komponente ( http://comport.sf.net/ ) in 2 Instanzen (sagt man das so?).
Jede geht auf einen anderen Port.

Zb ComCom1 und ComCom2

Wenn nun ein User zB mit ComCom1 den Com15 öffnet und (weil man ja nicht davon ausgeht, daß das Programm ein DAU benutzt) auf ComCom2 auch Com15 öffnen will - fängt die Komponente eine Exception ab (EOSError System-Fehler 5).

Jetzt springt die da aber nach der Abhandlung nicht raus, sondern fährt an der Stelle fort, bevor der Fehler passiert ist und provoziert ihn gerade nochmal, und nochmal und so weiter... :pale:

Schreibe ich also
Delphi-Quellcode:
try
 ComCom2.Open;
except
 //behandle das
end;
Knallt es in der Open-Procedure, kommt wieder raus und setzt die Programmausführung nach dem "try" fort, also wieder mit ComCom2.Open - wo es dann wieder knallt... und so fort :pale:
Es springt also nicht ins Except.

Wie kann ich das lösen?

dummzeuch 21. Jul 2017 18:40

AW: Exception verlassen?
 
Delphi-Quellcode:
try
  doSomething;
except
  handleTheException;
  raise; // raise the same exception again
end;
oder

Delphi-Quellcode:
try
  doSomething;
except
  handleTheException;
  raise ESomeOtherException; // e.g. EAbort
end;

himitsu 21. Jul 2017 19:25

AW: Exception verlassen?
 
Hat diese Komponente ein OnException, oder etwas Vergleichbares?

Es kann sein, dass die Komponente den Fehler intern mit einem Try-Except abfängt und man dort das Verhalten entweder über Options-Property oder Events-Methoden steuern kann.

Der Zugriff auf den COM-Port wird in einem Thread behandelt und leider haten viele Komponentenentwickler hier nicht genug Ahnung, wie man solche Exceptions an den aufrufenden Thread weiter reicht, wenn sie eigentlich von dort initiiert wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz