Puh... Ich weiß nicht, obs funktioniert, aber mein erster Ansatz wäre soetwas:
Delphi-Quellcode:
procedure TForm1.ZwischenAufruf(args:
array of const);
var i: Integer; p: Pointer;
begin
p := FMethod.Code;
i := Length(args);
case i
of
0:
asm
push p
mov eax, Self
call [esp]
pop p
end;
1:
asm
push p
mov eax, Self
mov edx, [edx]
mov edx, [edx]
call [esp]
pop p
end;
2:
asm
push p
mov eax, Self
mov edx, [edx]
mov ecx, [edx+4]
mov edx, [edx]
call [esp]
pop p
end;
else
asm
mov eax, args
mov eax, [eax]
mov ecx, [eax-4]
mov edx, [edx]
@_l:
push [edx+ecx*4]
cmp ecx, 2
jnz @_1
mov ecx, [edx+4]
mov edx, [edx]
call p
end
end;
end;
Ist ungetestet.. Grad so runtergeschrieben eben. Um Assembler wirst du bei diesem Vorhaben jedenfalls nicht rumkommen...