Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#9

Re: Abfangen von Exceptions bei LoadLibrary

  Alt 21. Sep 2009, 22:16
Altbekannt, da der PE Loader abhängig von dem Modus still oder laut das ganze ausgibt. Aber anscheinend ist das damals bei mir wohl untergegangen.

Aber mal ein zusätzlicher Hinweis: DLLs die in MS Visual Studio C++ geschrieben wurden haben in ihrem Startup Code die Eigenheit die FPU Exception Mask umzustellen. Dadurch werden illegale Operationen still und heimlich von der FPU behandelt, also es wird NaN und INF berechnet anstatt einer Exception. Delphi wiederrum setzt Exceptions voraus und kommt dadurch spätestens bei irgendwelchen Fließkommaberechnungen in die Bedrängnis, wenn es von NaN oder INF etwas berechnen soll. Von daher sollte hier nochmals explizit Delphi-Referenz durchsuchenSafeLoadLibrary() erwähnt werden. Werden DLLs komplett statisch geladen kommt der Startup Code der App (somit Delphi der die Maske umsetzt) erst nach dem Startup Coder statisch gelinkten DLLs, da der PE Loader diese Abhängigkeiten vorher auflösen muss. Wenn eine DLL oder auch eine solche DLL Kette aber dynamisch geladen wird hat man ein Problem. Von daher der Hinweis.

Sorry nochmals dass ich damals nicht auf die WinAPI Funktion hingewiesen hatte.

@Chris.R: SafeLoadLibrary() wurde für die von mir beschriebene Gegebenheit eingeführt und mit Delphi 7 um den zweiten Parameter erweitert, da dieser zuvor nicht von außen steuerbar war.
  Mit Zitat antworten Zitat