Ich habe so was ähnliches auch mal gemacht, allerdings etwas ausführlicher:
DLL:
Delphi-Quellcode:
var Objekte : array of TObject;
function CreateObject : integer; stdcall;
begin
SetLength(Objekte, length(Objekte)+1);
Objekte[high(Objekte)].create;
result := high(Objekte);
end;
procedure MachWas(index : integer); stdcall;
begin
Objekte[index].MachWas;
end;
procedure DestroyObject(index : integer); stdcall;
begin
Objekte[index].Free;
end;
exports
CreateObject,
DestroyObject,
MachWas;
Wenn du nun im Programm eine Klasse nach folgendem Muster erstellst:
Delphi-Quellcode:
type TMeineKlasse = class(TObject)
private
index : integer;
public
constructor Create;
destructor Destroy; override;
procedure MachWas;
end;
function CreateObject : integer; stdcall; external 'Beispiel.dll';
procedure DestroyObject(index : integer); stdcall; external 'Beispiel.dll';
procedure MachWas(index : integer); stdcall; external 'Beispiel.dll';
constructor TMeineKlasse.Create;
begin
index := CreateObject;
end;
destructor TMeineKlasse.Destroy;
begin
DestroyObject(index);
end;
procedure TMeineKlasse.MachWas;
begin
MachWas(index);
end;
dann kannst du quasi Objekte "aus" der
DLL benutzen. Es reicht dann völlig aus wenn du in der
DLL für jede public-Methode sowie Konstruktor und die Free-Methode ne eigene Prozedur/Funktion mit dem Index als Parameter (außer beim Konstruktor) schreibst und diese exportierst. Find ich immer wieder praktisch, wenn man auch mal mehrere Instanzen eines Objektes aus einer
DLL erzeugen und benutzen will.
Gruß
Michael