Hi,
Also du hast mir bisher sehr geholfen. Es tut mir Leid, aber ich muss nochmal weiter nachfragen
Ich habe jetzt die "Float-Kompatibilität" auf die Parameter 3-n erweitert (bzw 4-n wenn man Self mitzählt), also die Parameter die auf dem Stack abgelegt werden.
Jedoch kommt bei mir in der Funktion immer nur der Wert: -3,6854775808e-3509.
Außerdem erhalte ich die
Exception: "Ungültige Gleitkommaoperation in meiner Test4-Procedure:
Delphi-Quellcode:
procedure TForm1.Test4(b: Byte; S: String; f: Extended); //b und S sind nur damit f der dritte parameter sein kann
begin
ShowMessage(S + ' ' + FloatToStrF(f,ffNumber,5,2) + IntToStr(b));
end;
Hab mir auch den Stack angeguckt: Ich glaube da ist diesesmal nichts verschoben, er sieht jetzt immer total anders aus...
Hier der Code:
Delphi-Quellcode:
procedure TForm1.ExecuteScriptMethod(Method:
String;
Params:
array of Const);
var max,off: Integer;
proc: Pointer;
begin
proc := MethodAddress(Method);
max := Length(Params);
for i:= 2
to max-1
do
begin
off := i*8;
asm
mov edx,[Params]
add edx,off
movzx ecx,[edx+$04]
// Params[i].VType --> ecx
sub ecx,3
// if Params[i].VType = vtExtended
jnz @NoExt
movzx ecx, word ptr [edx+$08]
// then...
push ecx
push [edx+$04]
push [edx]
jmp @LoopEnd
@NoExt:
// else
push [edx]
@LoopEnd:
end;
end;
// edx,ecx Parameter und eax = Self Parameter folgen
end;
Apollonius... *hundeblick*