Hallo zusammen,
ich habe eine nicht ganz triviale Frage für die Leute, die gerne auch mal etwas unter die Haube schauen. Beim 64 Bit Compiler von Delphi wurde die Art, wie die kompilierten Programme Exceptions handlen laut diversen Quellen komplett überarbeitet.
Bei meinen Nachforschungen habe ich unter anderem festgestellt, dass die generierte
PE Datei eine zusätzliche .pdata Section enthält.
Zitat:
The biggest difference in
exception handling between Delphi 32 and 64-bit is that in Delphi XE2 64-bit you will gain more performance because of different internal
exception mechanism. For 32-bit applications, the Delphi compiler (dcc32.exe) generates additional code that is executed any way and that causes performance loss. The 64-bit compiler (dcc64.exe) doesn’t generate such code, it generates metadata and stores it in the PDATA section of an executable file instead.
Hat jemand hierzu genauere Informationen (Struktur der Daten, Für was werden die zusätzlichen Daten verwendet, Wie werden sie verwendet, etc)?
Hintergrund ist, dass ich eine .dll per Manual Mapping in den Speicher lade und Funktionen daraus aufrufe. Unter 32 bit funktioniert dies mit Delphi DLLs wunderbar. C++ DLLs, welche ohne SafeSEH kompiliert wurden, kann ich sogar unter 32 und 64 Bit erfolgreich laden. Leider führt jeder try..except oder try..finally Block in einer 64 Bit Delphi
DLL unmittelbar zu einer non continuable
Exception, woraus ich schließe, dass dies mit dem neuen
Exception Handling zusammenhängen muss (insbesondere, dass ich beim Mappen die .pdata Section noch parsen und anwenden muss).
Viele Grüße
Zacherl