FreeLibrary - DLL aus dem Speicher entfernen geht nicht.

tass

Mitglied
Hallo Programmierfreunde,

kann mir jemande erklären wie man mit "FreeLibrary" DLLs entlädt.
Ich kann die Funktion zwar benutzen und kompilieren, aber wenn ich
mir mit ListDlls, die geladenen Dlls ansehe ist sie immer noch da?

Hier mein Codeausschnitt:

Code:
//  Wenn die Dll zum Modul schon geladen ist, dann entlade sie.
    if(hInstLicModul != NULL)
    {
        FreeLibrary(hInstLicModul);
        hInstLicModul = NULL;
    }

Bitte um Hilfe ;)
 
Teste doch mal den Rückgabewert. Und mach GetLastError() ("If the function fails, the return value is zero. To get extended error information, call GetLastError").

Könnte es übrigens sein, dass du die DLL wiederholt mit LoadLibrary() geladen hast? Du wirst sie nämlich erst los, wenn ihr Referenzähler auf Null geht. Der wird mit jedem FreeLibrary() dekrementiert.
 
Da kann durchaus Windows dran schuld sein.

Ist glaube ich sogar so voreingestellt: Wenn Libraries freigegeben werden, werden die nicht unbedingt sofort wieder rausgeschmissen. Es könnte ja sein, dass dein Programm wieder drauf zugreifen will.

Ich meine es gibt sogar Tools, mit denen man das umstellen bzw. das Entladen bei gerade aktiven Programmen erzwingen kann.

Vielleicht hab ich aber auch nur zuviel von den roten Pilzen gegessen...... siehmaldieschönenFarb...x.xcgflgl
 
Vielen Dank für die schnelle Hilfe,

der Rückgabewert von FreeLibrary ist 1, also ok.

Die LoadLibrary wird nicht doppelt aufgerufen.
Wenn ich allerdinds die FreeLibrary doppelt aufrufe, wird die DLL aus dem Speicher entfernt.
Aus irgend einem Grund gibt es zwei Referencen auf die DLL?

Blöd nur, dass es mir beim Debuggen nen Fehler auswirft, aber im normal
Betrieb läufts.

mfg tass
 
Zurück