Beim Entladen der DLLs werden auch deren Entladeroutinen ausgeführt sofern die
DLL nicht noch anderweitig im Programm benutzt wird. Vielleicht passiert da etwas, was das verursacht.
Dass zu jedem LoadLibrary genau ein FreeLibrary existiert, hast du ja sicher schon sichergestellt, oder? (Das war mein Problem in einer Anwendung einmal.)
Delphi-Quellcode:
//Prüfroutine für Winamp-Plugins
function IsWinampPlugin(APlugin:
string):BOOL;
var
ext :
string;
dll : HMODULE;
begin
result := FALSE;
ext := uppercase(ExtractFileExt(APlugin));
if (ext <> '
.DLL')
then
exit;
dll := LoadLibrary(PWideChar(APlugin));
if (
dll = 0)
then
exit;
if GetProcAddress(
Dll, '
winampVisGetHeader') =
nil then
begin
FreeLibrary(
dll);
exit;
end;
FreeLibrary(
dll);
result := TRUE;
end;
Ich suche recursive nach
DLL's im Ordner wird eine gefunden und der Einsprungspunkt fehlt wird sie entladen.
Natürlich auch wenn er gefunden wird.
Das sollte eigentlich der richtige weg sein.
So funktioniert acuh mein Programm 100% als eigenständige EXE aber nicht in der
IDE(Laden von Dateien) usw..
Entferne ich das letzte FreeLibrary dann funktioniert die
IDE 100% aber die Anwendung nicht mehr bei diversen dingen.
gruss