Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Nicht behandelte Exception in DLL zentral behandeln

  Alt 14. Nov 2014, 15:49
Die Exceptionbehandlung ist in der System.pas geht absichtlich auf Pointer und nicht TObject oder gar auf Exception.
In Delphi sind zwar alle Exceptions von Exception abgeleitet, aber dann getrennter RTTI hat die DLL eigene Versionen von TObject/Exception, welche grundsätlich nicht kompatibel mit der EXE sind, vorallem nicht wenn es sich um unterschiedliche Compiler handelt.
Delphi Version X, Delphi Version Y, C++Builder, C++, Free Pascal oder sonstwas.

In der EXE kommt also eine "Exception" an, aber sie wird nicht als Delphi-Exception-Klasse erkannt.
Man könnte jetzt natürlich in der EXE diese Exception behandeln und über blinde Casts oder Zeigergefummele den Klassennamen und die Message auslesen, aber besser ist es das in der DLL zu behandeln und auf anderen Wege (z.B. Fehlercodes) rauszugeben.

Zitat:
Meine Idee wäre jetzt auf dieser Ebene (Vermutlich würde Hooking von TApplication.HandleException reichen) und eine Erkennung einzubauen ob das Exception-Objekt wirklich ein D6.TObject ist. Falls nein dann die Plugins fragen ob dieses Objekt von ihnen kommt und dann über die DLL-Schnittstelle den Exception-Text abfragen.
Könnte man machen, indem man den Speicher analysiert, wichtige Daten ausliest und dann entweder selber die Exception behandelt, oder aus diesen Daten ein neues Exception-Objekt erstellt, welches weitergegeben wird.



Alternativ linkt man halt DLL und EXE gegen die RTL und schon kann man die Exceptions problemlos rausgeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (14. Nov 2014 um 15:51 Uhr)
  Mit Zitat antworten Zitat