AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

probleme bei eigenem Exception-Objekt...

Ein Thema von heiopei · begonnen am 5. Jun 2006 · letzter Beitrag vom 6. Jun 2006
Antwort Antwort
heiopei
(Gast)

n/a Beiträge
 
#1

probleme bei eigenem Exception-Objekt...

  Alt 5. Jun 2006, 18:42
Abend,
zu Beginn muss ich sagen, dass das ganze nur ne Spielerei ist und ich mich nur gewundert habe, dass es nicht funktioniert.

Also, ich hab mir gedacht, doch mal beim Erzeugen von Ausnahmezuständen (was Exceptions ja eigenlich bedeuten) mittels raise auf die Exceptionklasse von der Unit SysUtils zu verzichten und meine eigene Exceptionklasse zu implementieren. Dabei habe ich mich genau an die exceptionklasse aus Sysutils, gehalten, jedoch auf alle Aufruffunktionen und Eigenschaften außer "constructor Create" und "property Message" verzichtet. das ganze war dann auch kompilierbar und die Exceptions wurden auch angezeigt, als ich das Testprogramm mit Delphi startete. Als ich es aber vom Explorer aus startete, erschienen die normalerweise im Programm angezeigten Exceptionmeldungen nicht mehr, sondern nur eine Fehlermeldung mit der Aussage, es sei an der Adresse sowieso ein Fehler der Klasse MeineException aufgetreten.

Woran liegt es also, dass die Exceptionklasse aus SysUtils funktioniert und meine eigene nicht?


mfg,
heiopei
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: probleme bei eigenem Exception-Objekt...

  Alt 5. Jun 2006, 20:48
Wie hast du sie deklariert von TException abgeleitet?
Markus Kinzler
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#3

Re: probleme bei eigenem Exception-Objekt...

  Alt 5. Jun 2006, 20:55
hallo,
nein ich hab sie von TObject abgeleitet. Mir fällt grad ein, dass ich es sogar einfach damit versucht habe, die komplette Exceptionklasse aus SysUtils zu übernehmen, also die klassendefinition und deren implementierung. Aber es hat trotzdem nicht zum normalen ergebnis geführt, dass wenn die anwendung nicht mit Delphi gestartet wird, dennoch der normale Fehlertext und nicht eine völlig nichtssagende Fehlermeldung erscheint.

den code muss ich erst noch holen, werde ihn bei bedarf morgen posten...

schönen abend noch,
heiopei
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: probleme bei eigenem Exception-Objekt...

  Alt 5. Jun 2006, 20:56
Weniger Probleme dürftest du haben, wenn du deine Exceptionklasse einfach ableitest.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: probleme bei eigenem Exception-Objekt...

  Alt 5. Jun 2006, 20:58
Genau, denn ich vermute einfach mal, in dem Exception-Handling steckt auch ne Menge Compiler-Magic

Ich hab' jetzt die Quelltexte der SysUtils nicht da (D05PE ) aber man kann ja nicht jede Klasse im Exception-Handler einfangen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: probleme bei eigenem Exception-Objekt...

  Alt 6. Jun 2006, 13:35
Es steckt definitiv CompilerMagic drin, denn ich kämpfe selbst seit Monaten damit. Obwohl ich nicht nur die Exceptionklasse neu aufgesetzt hab, sondern auch noch ein eigenes Exception-Handlich aufgesetzt hab.

Hab mich da weitestgehends an die SysUtils-QuellCodes gehalten und dennoch tauchen da einige Probleme auf (mal abgesehn, das ich mit Unicode arbeite und nur in der DebugVersion den FehlerText als AnsiString drin hab (für den Debuger, da der kein Unicode "kann".

Man kann leicht selber prüfen, daß die "SysUtils.dcu" nicht mit der SysUtils.pas übereinstimmt ... einfach mal die SysUtils.pas in das Projektverzeichnis kopieren, dann wird diese verwendet, stadt der vorkompilierten Version und schon wird man merken, daß das ExceptionHandling im Programm nicht mehr funktioniert, obwohl man ja davon ausgehen kann, daß das ExeptionHandling sich augrung der "gleichen" QuellCodes nicht geändert haben sollte.



Aber nochmal zu deinem Problem ... du mußt, wenn du das Exceptionhandling von Delphi verwendest deine ExceptionKlasse von EXCEPTION ableiten, da innerhalb der Exceptionbehandlung sozusagen auf "is Exception" geprüft wird, wenn es zur Anzeige/Abarbeitung der exception komme und wenn die Klasse nicht von Exception abgeleitet wird, dann wird nur der Standardfehlerdialg angezeigt "Fehler xyz auf Adresse abc".

Bei meiner Behandlung prüfe ich daher nicht über die RTTI, sondern den Namen der Klasse, das ist vorallem wichtig, weil ich meine Behandlung Programmweit initialisiere und somit die Exception auch in 'nem anderen Modul, also mit 'ner anderen Klassendefiniton behandelt werden könnte und somit die Prüfung per IS fehlschlagen würde und natürlich für die Kompatbilität zu Delphi's Exceptionsklassen.
$2B or not $2B
  Mit Zitat antworten Zitat
heiopei
(Gast)

n/a Beiträge
 
#7

Re: probleme bei eigenem Exception-Objekt...

  Alt 6. Jun 2006, 13:48
hallo himitsu,
hab auf deine antwort gewartet *gg*

also gut dann werd ich das wohl einfach bleiben lassen.

aber, wie meinst du dass:
Zitat von himitsu:
Bei meiner Behandlung prüfe ich daher nicht über die RTTI, sondern den Namen der Klasse, das ist vorallem wichtig, weil ich meine Behandlung Programmweit initialisiere und somit die Exception auch in 'nem anderen Modul, also mit 'ner anderen Klassendefiniton behandelt werden könnte und somit die Prüfung per IS fehlschlagen würde und natürlich für die Kompatbilität zu Delphi's Exceptionsklassen.
mfg,
heiopei
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: probleme bei eigenem Exception-Objekt...

  Alt 6. Jun 2006, 14:29
Ich hab im Gunde die ExceptionBehandlung von Delphi genommen und etwas umgestaltet/erweitert.

Unter Anderem initialisiert sich meine Exceptionbehandlung nur einmal (halt so ähnlich wie mein MemoryManager) und wenn diese von einem weiteren Modul (EXE und DLLs im selben Prozess) benötigt wird, dann initialisiert dieses Modul keine eigene Instanz davon, sondern nurtzt die bereits Vorhandene.

Die DelphiVersion erzeugt für jedes Modul eine eigene Instanz, wo z.B. beim initialisieren überall schon am Anfang ein OutOfMemory-Objekt erzeugt wird (wenn zuwenig Speicher vohanden ist, dann kann ja eventuell auch schon für dieses Ojkekt der Speicher nicht mehr ausreichen, also muß es schon vorher existieren, auch wenn es "hoffentlich" nie benötigt wird ... somit existieren in einem "StandardProgramm" mit mehreren DelphiModulen (EXE und/oder ein/mehrere DLLs, welche mit Delphi erstellt worden) auch mehrfach diese Exceptionbehandlungen und natürlich auch mehrere OutOfExceptionsobjekte und noch einiges mehr (was also "unnötig" im Speicher rumliegt).

Bei mir wird's in Zukunft (wenn alles mal richtig läuft) unter Anderem noch 'ne "Sparversion" davon geben denn wenn man ganz sicher weiß, daß in einer statisch geladenen DLL diese Exceptionbehandlung vorhanden ist, dann kann man ja auch diese verwenden und benötigt z.B. in der EXE keine eigenen mehr ... man könnte dann also in der sogar die ganzen Codes für eine eigene Exceptionbehandlung weglassen (spart dann nicht nur Speicher, sondern verkleinert auch noch die Programmdatei)

und das Prüfen:
Delphi macht
Delphi-Quellcode:
If Object is Exception Then Begin
  ... // behandle über das ExceptionObject
End Else Begin
  ... // gib nur die "Fehler xyz bei Adresse abc aufgetreten"-Meldung aus
End;
und bei mit wird "nur" so geprüft:
Delphi-Quellcode:
If Object.Name = 'ExceptionThen Begin
...
(natürlich nicht "nur" so einfach, da ich natürlich noch prüfen muß, ob ein Vorfahre des Objekts "Exception" heißt, falls es mal nicht selber so heißt, da es z.B. von soeinem abgeleitet wurde.
Weglassen kann ich diese Prüfung ja nicht, da eine Exception auch mal ohne ExceptionObjekt ausgelöst werden könnte und dann dieses natürlich nicht vorhanden wäre, oder auch mal ein Fehler in der Exception selber drin sein könnte, wo dann z.B. kein "gültiges" ExceptionObjekt existieren würde.

Man könnte also auch ein eigenes Objekt erstellen, welches "Exception" heißt, solange die beiden ersten "Variablen" darin den ExceptionText und den HilfeKontext (der kann auch 0 sein) enthalten (dieses ist ja eigentlich nur das, worauf es ankommt).


Aber wie gesagt, bis jetzt läuft es noch nicht so ganz, da anscheinend irgendwas von der SysUtils noch mit initialisiert wird, was ich noch nicht rausgefunden hab und was nicht in dem SysUtils-QuellCode drinsteht.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 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