Mam problem ze zwalnianiem dynamicznie załadowanej biblioteki. Pomimo, że biblioteka jest załadowana podczas jej zwalniania dostaje błąd Access Violation.
procedure TGlowneOkno.FormCreate(Sender: TObject);
var
SearchRec : TSearchRec;
temp: string;
DLL_Handle: THandle;
Ext: PAnsiChar;
Info: procedure(var Info: TDllInfo); stdcall;
begin
FindFirst(ExtractFilePath(ParamStr(0))+'components/*.*',faAnyFile, SearchRec);
repeat
Temp := Copy(lowercase(ExtractFileExt(SearchRec.name)),2,999);
if (Temp = 'dll') then
begin
Ext := PAnsiChar(ExtractFilePath(ParamStr(0))+'components/'+SearchRec.name);
DLL_Handle := LoadLibrary(Ext);
if (DLL_Handle <> 0) then
begin
@Info := GetProcAddress(DLL_Handle, 'info');
if (@info <> nil) then
begin
SetLength(DLLInfo, High(DLLInfo)+2);
Info(DLLInfo[High(DLLInfo)]);
end;
//FreeLibrary(DLL_Handle); <--tutaj jest błąd
end;
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
DLLInfo jest dynamiczną tablicą rekordów w postaci
type
TDllInfo = record
AcceptedTypes: string;
FileName: string;
Name: string;
end;