Jup...weiß ich. Bin inzwischen ein wenig weiter gekommen.
Statt der Methode aus der ObjAuto, verwend ich deine Routine aus DSharp.
Dabei bau ich den PParameters selbst zusammen, anhand der Typen.
Delphi-Quellcode:
//Fillup PParameters for calling the method and handling the stack
//and calculating the Stacksize
New(para);
fillchar(para^,sizeof(para^),0);
StackSize := 0;
sc := 0;
for i := MethSig.paramCount-1 downto 1 do
begin
case MethSig.Parameters[i].Location of
plEDX : para^.Registers[plEDX] := GetValueAsCardinal(params[i-1]);
plECX : Para^.Registers[plECX] := GetValueAsCardinal(params[i-1]);
ELSE
if(MethSig.Parameters[i].Location > plECX) then
begin
v := @params[i-1];
MoveValue(v,para,stacksize);
end;
end;
end;
InvokeMethod(Method,para,stacksize);
dispose(para);
Aufruf:
fevents.Execute('TEventType6',[150,333,42,true,'Wuptidupti']);
Das Problem ist der 3 Parameter im Array (also die 42), die wird einfach mit 0 übergeben. Der Rest passt.