Ich hatte die Parameter in einem Record. Aber mit dem Array funktioniert es bei mir auch.
Da ich dein Interface nicht habe, habe ich einfach mal IStrings genommen.
Delphi-Quellcode:
type TParams=packed record
p1,p2:Integer;
end;
var x:variant;
tmp:IStrings;
CallDesc:TCallDesc;
Params:TParams;
p:array[0..255] of byte;
n:Integer;
const Name='item'#0;
begin
//IStrings Interface vom memo1 in Variant erstellen
getOlestrings(memo1.lines,tmp);
x:=tmp;
tmp:=nil;
//Variante 0
x.item[1]:=12;
//Vorbereitungen für VarDispProc
CallDesc.CallType:=DISPATCH_PROPERTYPUT;
CallDesc.ArgCount:=2;
CallDesc.NamedArgCount:=0;
CallDesc.ArgTypes[0]:=varInteger;
CallDesc.ArgTypes[1]:=varInteger;
move(name,CallDesc.argTypes[2],length(name));
//Variante 1
n:=1;
move(n,p[0],4);
n:=15;
move(n,p[4],4);
VarDispProc(nil,x,@CallDesc,@P);
//Variante 2
Params.p1:=1;
Params.p2:=10;
VarDispProc(nil,x,@CallDesc,@Params);
end;
Edit: Wahnsinn wie schnell die Zeit vergeht. Da kopiert man nur kurz und schwupps sind wieder 15 Minuten rum.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.