ich habe einen Record:
Code: Alles auswählen
type
TMemberProc = function(a,b,c,d: integer): Integer;
TProcRec = record
ProcName: LPCTSTR;
ProcPtr: TMemberProc;
end;
TProcs = Array of TProcRec;
TProcRecClass = class(TObject)
private
FRec: TProcRec;
public
constructor Create(Rec: TProcRec);
property Rec: TProcRec read FRec write FRec;
end;
TProcList = class(TObject)
private
FCount: Integer;
FCapacity: Integer;
FProcedures: TProcs;
public
constructor Create;
function Add(ARec: TProcRec): Integer;
Count: integer read FCount;
Capacity: Integer read FCapacity write FCapacity;
property Procedures[Index: Integer]: TProcRec read FProcedures write FProcedures;
end;
constructor TProcRecClass.Create(Rec);
begin
inherited Create;
FRec:=Rec;
end;
constructor TProcList.Create;
begin
inherited Create;
SetLength(FProcedures, 2);
FCapacity := 4;
end;
function TProcList.Add(ARec: TProcRecClass): Integer;
begin
inc(FCount);
if FCount > FCapacity then SetCapacity(FCount);
FProcedures[FCount-1] :=ARec.Rec;
end;
Code: Alles auswählen
var
r: TProcRec;
c: TProcRecClass;
l: TProcList;
i: Integer;
a,b,c,d: Integer;
function Addfunc(a,b,c,d: Integer): Integer; stdcall;
begin
Result := a+b+c+d;
end;
function SubFunc(a,b,c,d: Integer): Integer; stdcall;
begin
Result := (a+b) - (c+d);
end;
begin
r.ProcName := 'Addiere';
r.ProcPtr := @Addfunc;
c := TProcRecClass.Create(r);
l := TProcList.Create;
l.Add(c);
r.ProcName := 'Subtrahiere';
r.ProcPtr := @SubFunc;
c := TProcRecClass.Create(r);
l.Add(c);
while i < l.Count do
begin
l.Procedures[i].ProcPtr(a,b,c,d); //Das funktioniert aber nicht. Warum?
end;
end.