Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Trotz try...finally: Exception "Klasse nicht registriert" (https://www.delphipraxis.net/47333-trotz-try-finally-exception-klasse-nicht-registriert.html)

Mamphil 9. Jun 2005 14:19


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:
  // 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;
Obwohl das XLApp.Connect im try..finally-Block steht wird die folgende Exception ausgelöst wenn Excel nicht installiert ist:
Code:
---------------------------
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  
---------------------------
Ich habe schon hier im Forum eine Beschreibung des Fehlers gefunden (http://www.delphipraxis.net/internal...se+registriert) aber von einem Lösungsweg steht dort nichts.

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

Matze 9. Jun 2005 14:22

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.

barf00s 9. Jun 2005 14:22

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

Robert Marquardt 9. Jun 2005 14:23

Re: Trotz try...finally: Exception "Klasse nicht regist
 
Na es faellt schon TExcelapplication.Create auf die Nase und das steht ausserhalb des try-Blocks.

Mamphil 9. Jun 2005 14:25

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:
---------------------------
xxxxxxxxxx
---------------------------
Klasse nicht registriert.
---------------------------
OK  
---------------------------
Weitere Vorschläge?

[EDIT]da war inzwischen ja eine neue Antwort :mrgreen:
Zitat:

Zitat von Robert Marquardt
Na es faellt schon TExcelapplication.Create auf die Nase und das steht ausserhalb des try-Blocks.

Nein, tut es leider nicht. Wenn ich das XLApp.Connect; auskommentiere, läuft alles ohne Fehlermeldung...
[/EDIT]

Mamphil

jfheins 9. Jun 2005 14:30

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;
;)

Matze 9. Jun 2005 14:34

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.

jfheins 9. Jun 2005 14:39

Re: Trotz try...finally: Exception "Klasse nicht regist
 
Zitat:

Zitat von Matze
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.

Falsch :P

Gerade ausprobiert. Baue
Delphi-Quellcode:
  try
    MessageBeep(100 div strtoint ('0'));
  finally
  end;
in ein Event ein, und du wirst eine Exception zu Gesicht bekommen ;)

Matze 9. Jun 2005 14:40

Re: Trotz try...finally: Exception "Klasse nicht regist
 
:shock: Tatsache, dann habe ich mich da geirrt...

Robert_G 9. Jun 2005 14:45

Re: Trotz try...finally: Exception "Klasse nicht regist
 
Zitat:

Zitat von Matze
:shock: Tatsache, dann habe ich mich da geirrt...

Hast du nicht. ;)
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 15:11 Uhr.
Seite 1 von 2  1 2      

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