Einzelnen Beitrag anzeigen

Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Prozedur per Pointer aufrufen

  Alt 22. Dez 2011, 13:57
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
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat