Danke für den Hinweis mit dem "SafeLoadLibrary" aus der
Unit "SysUtils", ich wusste nicht, dass Delphi/FreePascal eine solche Methode bereits anbietet - eine Abhängigkeit zur
WinAPI weniger in meinem Quellcode.
Ich habe nur Delphi-DLLs getestet und vom Umbiegen des FPU-Steuerworts wusste ich nichts - das hat sich nun geändert.
Edit:
Da FreePascal "SafeLoadLibrary" unvollständig implementiert, habe ich das jetzt in eine neue "SafeLoad" Prozedur geschrieben:
Delphi-Quellcode:
uses
{$IFDEF WIN32}Windows
{$ELSE}dynlibs
{$ENDIF};
function AcLoadLibrary(AModule:
string): TAcHandle;
var
fpu_word: Word;
begin
//Store the fpu control word as some dlls might corrupt it when they are not
//loaded properly
fpu_word := get8087cw;
{$IFDEF WIN32}
//On Windows prevent the PE-Loader from showing up any exceptions
SetErrorMode(SEM_FAILCRITICALERRORS);
{$ENDIF}
try
result := LoadLibrary(PChar(AModule));
finally
{$IFDEF WIN32}
//Reset the error mode to default
SetErrorMode(0);
{$ENDIF}
//Reset the FPU word
set8087cw(fpu_word);
end;
end;
Edit2:
SEM_NOOPENFILEERRORBOX, was bei "SafeLoad" der Default ist, unterdrückt das Anzeigen der Fehlermeldung leider nicht!