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;
Wenn ich dann später in einer Schleife die vorher zugewisenen Prozeduren aufrufen will schlägt das fehl, Prozedurzeiger ist NIL. Warum kann ich das nicht so machen und wie kann ich Records mit einem Prozedurzeiger speichern?
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.