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