![]() |
Trotz try...finally: Exception "Klasse nicht registrier
Hallo!
Der folgende Code wird in einem Projekt beim Starten ausgeführt. Es soll überprüft werden, ob Excel installiert ist und ggf. die entsprechenden Menüpunkte freischalten:
Delphi-Quellcode:
Obwohl das XLApp.Connect im try..finally-Block steht wird die folgende Exception ausgelöst wenn Excel nicht installiert ist:
// Ist Excel installiert? (zum Einlesen / Abspeichern der Spielpläne)
// Menü-Punkte ausschalten: Hauptform.ImportierenXLS1.Enabled := false; Hauptform.ExportierenXLS1.Enabled := false; XLApp := TExcelApplication.Create(Self); try XLApp.Connect; // wenn's klappt: Menüpunkte wieder einschalten Hauptform.ImportierenXLS1.Enabled := true; Hauptform.ExportierenXLS1.Enabled := true; finally XLApp.Disconnect; end;
Code:
Ich habe schon hier im Forum eine Beschreibung des Fehlers gefunden (
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt SchiriManager.exe ist eine Exception der Klasse EOleSysError aufgetreten. Meldung: 'Klasse nicht registriert'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- ![]() Bisher dachte ich, dass ein try..-Block Exceptions abfängt und ich so darauf reagieren kann. Aber dass mir so oder so eine Fehlermeldung um die Ohren geworfen wird, ist doch sicherlich nicht Sinn der Sache... Habt ihr eine Idee, wie ich überprüfen kann, ob Excel installiert ist, ohne dass ich mich mit dieser Fehlermeldung herumschlagen muss? Am liebsten wäre mir natürlich, wenn ihr mir erklären könnt, weshalb das try im obigen Fall nicht greift. Vielen Dank im Voraus! Mamphil |
Re: Trotz try...finally: Exception "Klasse nicht regist
Ich nehme an, du hast es mittels F9 direkt aus Delphi heraus gestartet. Falls ja, geht es ziemlich wahrscheinlich beim externen Starten.
Unter Tools -> Debugger-Optionen -> Sprach-Exceptions kannst du abstellen, dass Delphi über die eigenen Exceptions benachrichtigt. Evtl. liegt es daran, versuche es mal. |
Re: Trotz try...finally: Exception "Klasse nicht regist
führ doch mal dein programm von außerhalb der IDE aus, und nicht mit "Play"/F9
|
Re: Trotz try...finally: Exception "Klasse nicht regist
Na es faellt schon TExcelapplication.Create auf die Nase und das steht ausserhalb des try-Blocks.
|
Re: Trotz try...finally: Exception "Klasse nicht regist
Danke für den ersten Tipp!
So richtig zufrieden bin ich mit der Erklärung zwar nicht, aber ok. Ich hab's versucht. Das Ergebnis: Die Fehlermeldung ist außerhalb der IDE kürzer ;)
Code:
Weitere Vorschläge?
---------------------------
xxxxxxxxxx --------------------------- Klasse nicht registriert. --------------------------- OK --------------------------- [EDIT]da war inzwischen ja eine neue Antwort :mrgreen: Zitat:
[/EDIT] Mamphil |
Re: Trotz try...finally: Exception "Klasse nicht regist
Afaik fängt nur ein try ... except - Block eine Exception ab, ein try ... finally nicht.
try ... finally sorgt nur dafür, dass etwas auf jeden Fall ausgeführt wird - aber es behandelt nicht die Exception. (Was nötig wäre, damit sie nicht zum Benutzer dringt, sondern abgefangen wird) Es müsste also so sein:
Delphi-Quellcode:
;)
try
try //... finally //... end; except //... end; |
Re: Trotz try...finally: Exception "Klasse nicht regist
Nein, also beim finally wird ein Fehler genauso abgefangen, mit dem Unterschied, das das, was im finally-Abschnitt steht immer ausgeführt wird, ob eine Exception ausgelöst wurde oder nicht.
|
Re: Trotz try...finally: Exception "Klasse nicht regist
Zitat:
Gerade ausprobiert. Baue
Delphi-Quellcode:
in ein Event ein, und du wirst eine Exception zu Gesicht bekommen ;)
try
MessageBeep(100 div strtoint ('0')); finally end; |
Re: Trotz try...finally: Exception "Klasse nicht regist
:shock: Tatsache, dann habe ich mich da geirrt...
|
Re: Trotz try...finally: Exception "Klasse nicht regist
Zitat:
Try finally macht exakt das, was du gesagt hasdt. try except schluckt die Exception. @Topic, kann es sein, dass du statisch gegen eine TypeLib kompilierst? Dann knallt's natürlich bei Start wenn diese nicht gefunden wird. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 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