А по теме.
тебе нужно разбить твою супер функцию на две или три части.
Первая - получения адреса функции из DLL+всякие проверки.
Вторая - разбор параметров и укладка их в массив. Безо всякого асма.
И третья сам вызов - тут самая большая проблема, которая, если её выделить, может сильно упроститься. например до вот этого
Код:
type
TFunction = function():DWord;stdcall;
function SuperCall(F:TFunction; const Params : Array of DWord):DWord;
var
I:Integer;
P:Pointer;
begin
for I:=0 to Length(Params)-1 do
begin
P:=@Params[i];
asm
mov EAX,P;
Push [EAX]; <<<<----======
end;
end;
Result:=F();
end;