Sven/Sarah Barth 3 years ago
parent
commit
f74a6abccf
1 changed files with 8 additions and 4 deletions
  1. 8 4
      packages/rtl-objpas/src/inc/rtti.pp

+ 8 - 4
packages/rtl-objpas/src/inc/rtti.pp

@@ -3057,26 +3057,30 @@ end;
 
 
 procedure TMethodImplementation.HandleCallback(const aArgs: specialize TArray<Pointer>; aResult: Pointer; aContext: Pointer);
 procedure TMethodImplementation.HandleCallback(const aArgs: specialize TArray<Pointer>; aResult: Pointer; aContext: Pointer);
 var
 var
-  i, argidx: SizeInt;
+  i, argidx, validx: SizeInt;
   args: TValueArray;
   args: TValueArray;
   res: TValue;
   res: TValue;
 begin
 begin
   Assert(fArgLen = Length(aArgs), 'Length of arguments does not match');
   Assert(fArgLen = Length(aArgs), 'Length of arguments does not match');
   SetLength(args, fArgLen);
   SetLength(args, fArgLen);
   argidx := 0;
   argidx := 0;
+  validx := 0;
   i := 0;
   i := 0;
   while i < Length(fArgs) do begin
   while i < Length(fArgs) do begin
     if pfArray in fArgs[i].ParamFlags then begin
     if pfArray in fArgs[i].ParamFlags then begin
+      Inc(validx);
       Inc(i);
       Inc(i);
       Assert((i < Length(fArgs)) and (pfHigh in fArgs[i].ParamFlags), 'Expected high parameter after open array parameter');
       Assert((i < Length(fArgs)) and (pfHigh in fArgs[i].ParamFlags), 'Expected high parameter after open array parameter');
-      TValue.MakeOpenArray(aArgs[i - 1], SizeInt(aArgs[i]), fArgs[i].ParamType, args[argidx]);
+      TValue.MakeOpenArray(aArgs[validx - 1], SizeInt(aArgs[validx]), fArgs[i].ParamType, args[argidx]);
       Inc(argidx);
       Inc(argidx);
+      Inc(validx);
     end else if not (pfHidden in fArgs[i].ParamFlags) or (pfSelf in fArgs[i].ParamFlags) then begin
     end else if not (pfHidden in fArgs[i].ParamFlags) or (pfSelf in fArgs[i].ParamFlags) then begin
       if Assigned(fArgs[i].ParamType) then
       if Assigned(fArgs[i].ParamType) then
-        TValue.Make(aArgs[i], fArgs[i].ParamType, args[argidx])
+        TValue.Make(aArgs[validx], fArgs[i].ParamType, args[argidx])
       else
       else
-        TValue.Make(@aArgs[i], TypeInfo(Pointer), args[argidx]);
+        TValue.Make(@aArgs[validx], TypeInfo(Pointer), args[argidx]);
       Inc(argidx);
       Inc(argidx);
+      Inc(validx);
     end;
     end;
 
 
     Inc(i);
     Inc(i);