Ich versuche mich gerade an einer Art Plugin-System. Dabei soll eine
DLL ein Interface zurückgeben. Das sieht im Moment so aus:
Delphi-Quellcode:
library Blabla;
uses MyIntf, MyClass; //Units, in denen das Interface und die implementierende Klasse stehen
{$R *.res}
procedure GetDings(out Dings: IDings); stdcall; export;
begin
Dings := TDings.Create;
end;
exports
GetDings;
begin
end;
Allerdings soll es mehrere DLLs geben, die verschiedene IDings-Klassen zurückliefern, daher binde ich diese dynamisch (LoadLibrary, GetProcAddress). Klappt soweit, aber der ordentliche Mensch denkt sich: wer LoadLibrary sagt, muss auch FreeLibrary sagen. Bei einem ersten Versuch hat es nur dann keine
AV gegeben, wenn ich dies in einen Klassendestruktor verfrachtet habe. Es soll aber auch möglich sein, verschiedene DLLs nacheinander anzusprechen, da würde ich mir auf diese Weise ja jedesmal das
Handle überschreiben und könnte somit nur das letzte wieder freigeben. Wo ist denn mein Denkfehler bzw. was könnte ich vergessen haben? Lasse ich FreeLibrary ganz weg, fluppt alles super, aber verschwende ich so keine Ressourcen?