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.