Zitat:
Delphi-Quellcode:
Delphi-Quellcode:
FunktionMR[52880] := @_StringSplit;
Stehen in dem Array nur Prozeduren drin oder auch andere Werte?
Dort stehen nur Prozeduren drin sonst nichts.
Wenn dort nur Prozeduren drinstehen, dann kannst du das Array auch folgendermaßen deklarieren:
FunktionsMR = Array [0..65535] of TProcedure;
Aufrufen kannst du ein Element dann einfach über
FunktionsMR[xyz]();
. Beachte aber bitte, dass das dann natürlich nicht funktioniert, wenn du dort Prozeduren reinsteckst, welche Parameter erwarten, oder auch Funktionen. Dann musst du wieder zu einem passenden Prozeduralen Typ casten (
TSomeProcType(FunktionsMR[xyz])(arg1, arg2);
).
Zitat von
romy:
Kurze frage im Anschluss. Wenn ich das
hier richtig verstanden habe dann ist das
Delphi-Quellcode:
type = TIrgendeineProzedur = procedure(x: integer); //
ein Typ den ich ganz vormal als Variable verwenden kann
Jupp. Das hast du richtig verstanden.
Zitat von
romy:
Delphi-Quellcode:
var
proc : TIrgendeineProzedur
Procedure printit (Var X : Integer);
begin
WriteLn (x);
end;
begin
Proc := @printit;
end.
wie kann ich das ganze dann aufrufen? So geht es aber kommt nur Müll.
Delphi-Quellcode:
Proc := @printit;
TProcedure(proc)();
Hiermit machst du den selben Fehler, den ich bereits mit dem
TMethod
erwähnt habe. Du kannst eine Prozedurvariable wie eine normale Funktion aufrufen mit allem was dazu gehört (Parameter, Funktionswert):
Delphi-Quellcode:
var
a: Integer;
begin
a := 0;
proc(a);
end;
Zitat von
romy:
Was ist wenn das ganze eine Funktion wäre wohin kommt das Ergebnis?
Genau wie bei einer normalen Funktion:
Delphi-Quellcode:
function AddFunc(aLeft, aRight: Integer): Integer;
begin
Result := aLeft + aRight;
end;
type
TBinaryIntFunc = function(aArg1, aArg2: Integer): Integer;
var
func: TBinaryIntFunc;
res: Integer;
begin
func := @AddFunc;
res := func(3, 5);
end;
Gruß,
Sven