Zitat von
StanY:
Delphi-Quellcode:
procedure TfrmMain.LoadDll(DllName:
String);
var
Handle: THandle;
begin
//Dll wird nun eingebunden
Handle := LoadLibrary(PChar(DllName));
if (
Handle <> 0)
then begin
GetCommand := GetProcAddress(
Handle,'
GetCommand');
end;
FreeLibrary(
Handle);
// <---
end;
Na du bist lustig, gibst die Bibliothek wieder frei, bevor du sie aufrufst
Du kannst entweder FreeLibrary() ganz weglassen, Windows kümmert sich beim Beenden des Programmes automatisch um das freigeben aller Ressourcen, auch der DLLs. Da das aber in deinem Fall nicht praktikabel ist, solltest du das
Handle der
DLL als globale Variable deklarieren und eine zusätzliche UnloadDLL() implementieren, die das
Handle mit FreeLibrary wieder freigibt. Dann kannst du in deinem Programm mit LoadDLL(URLfuerDLL) die
DLL laden und mit UnloadDLL() wieder entladen und gleich darauf eine andere
DLL laden.
Du musst nur sicher gehen, daß zwischen dem Entladen und dem Laden der
DLL keine Funktion aus dieser
DLL aufgerufen wird.