Einzelnen Beitrag anzeigen

Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
488 Beiträge
 
Delphi 11 Alexandria
 
#1

Anonyme methode als Parameter übergeben

  Alt 4. Jul 2015, 17:20
Delphi-Version: XE5
Hallo,
ich bins mal wieder und ich hab ne frage. Diesmal geht es um anonyme Methoden, die als Parameter einer von mir implementierten Funktion übergeben werden sollen.
Allerdings soll deren Parameterzahl beliebig sein.
Aktuell übergebe ich diese als Pointer meiner Funktion und rufe sie mit dem ASM-Befehl CALL auf.
Das funktioniert auch ganz prima. Nur leider ist ja Inline-Assembly nicht mehr unter x64 erlaubt und so suche ich nach einer geeigneten Alternative. Desweiteren erscheint es mir nicht besonders sauber, nur weil ich nicht weiß wie ich es sonst lösen soll, mitten in ner Funktion eine einzelne ASM-Zeile einzufügen...

Beispiel:
Delphi-Quellcode:
procedure Add(A,B: Integer; var C: Integer);
asm
  ADD EAX,EDX
end;

function Euler: Integer;
begin
  Result := Round(Exp(1));
end;
So, die oben genannten Methoden machen irgendetwas (ist ja jetzt erstmal egal was). Tatsache ist aber, dass sie zwei unterschiedliche Parameterlisten haben und und unterschiedliche typen zurückgeben.
Mein Ansatz bisher war wie folgt:

Delphi-Quellcode:
procedure DoSomething(Method: Pointer);
begin
  //...
  asm
    CALL [Method]
  end;
  //...
end;
Aufrufen tue ich das ganze dann wie folgt:

Delphi-Quellcode:
DoSomething(@Add);
DoSomething(@Euler);
Beifügen sollte ich evl. noch, dass sowohl die eingabeparameter als auch die ausgegebenen Werte nicht weiter von belangen sind. Dass die einzelne Methode also nur "schrott" ausgeben kann, wenn man ihre Parameter nicht definiert, dürfte klar sein.

MfG
Dennis
  Mit Zitat antworten Zitat