Procházet zdrojové kódy

* Fixed cleanroom implementation of DoVarClearArray. It fixes tw9098.

git-svn-id: trunk@10647 -
yury před 17 roky
rodič
revize
4341b18461
1 změnil soubory, kde provedl 5 přidání a 3 odebrání
  1. 5 3
      rtl/inc/variants.pp

+ 5 - 3
rtl/inc/variants.pp

@@ -2035,8 +2035,10 @@ begin
 end;
 
 {
-  Clears variant array. If array element type is varVariant, then
-  clear each element individually first.
+  This procedure is needed to destroy and clear non-standard variant type array elements,
+  which can not be handled by SafeArrayDestroy.
+  If array element type is varVariant, then clear each element individually before
+  calling VariantClear for array. VariantClear just calls SafeArrayDestroy.
 }
 procedure DoVarClearArray(var VArray: TVarData);
 var
@@ -2058,7 +2060,7 @@ begin
       { Clearing each element }
       for i:=1 to cnt do begin
         DoVarClear(data^);
-        Inc(data);
+        Inc(pointer(data), arr^.ElementSize);
       end;
     finally
       VarResultCheck(SafeArrayUnaccessData(arr));