|
@@ -2643,7 +2643,6 @@ var
|
|
valuevtype,
|
|
valuevtype,
|
|
arrayelementtype : TVarType;
|
|
arrayelementtype : TVarType;
|
|
tempvar : Variant;
|
|
tempvar : Variant;
|
|
- variantmanager : tvariantmanager;
|
|
|
|
begin
|
|
begin
|
|
Dest:=TVarData(a);
|
|
Dest:=TVarData(a);
|
|
{ get final Variant }
|
|
{ get final Variant }
|
|
@@ -2686,8 +2685,7 @@ begin
|
|
end
|
|
end
|
|
else
|
|
else
|
|
begin
|
|
begin
|
|
- GetVariantManager(variantmanager);
|
|
|
|
- variantmanager.varcast(tempvar,value,arrayelementtype);
|
|
|
|
|
|
+ VarCast(tempvar,value,arrayelementtype);
|
|
if arrayelementtype in [varOleStr,varDispatch,varUnknown] then
|
|
if arrayelementtype in [varOleStr,varDispatch,varUnknown] then
|
|
VarResultCheck(SafeArrayPutElement(p,PVarArrayCoorArray(indices),TVarData(tempvar).vPointer))
|
|
VarResultCheck(SafeArrayPutElement(p,PVarArrayCoorArray(indices),TVarData(tempvar).vPointer))
|
|
else
|
|
else
|
|
@@ -3328,17 +3326,13 @@ function VarTypeIsValidElementType(const aVarType: TVarType): Boolean;
|
|
var
|
|
var
|
|
customvarianttype : TCustomVariantType;
|
|
customvarianttype : TCustomVariantType;
|
|
begin
|
|
begin
|
|
- if FindCustomVariantType(aVarType,customvarianttype) then
|
|
|
|
- Result:=true
|
|
|
|
- else
|
|
|
|
- begin
|
|
|
|
- Result:=(aVarType and not(varByRef) and not(varArray)) in [varEmpty,varNull,varSmallInt,varInteger,
|
|
|
|
|
|
+ Result:=((aVarType and not(varByRef) and not(varArray)) in [varEmpty,varNull,varSmallInt,varInteger,
|
|
{$ifndef FPUNONE}
|
|
{$ifndef FPUNONE}
|
|
- varSingle,varDouble,varDate,
|
|
|
|
|
|
+ varSingle,varDouble,varDate,
|
|
{$endif}
|
|
{$endif}
|
|
- varCurrency,varOleStr,varDispatch,varError,varBoolean,
|
|
|
|
- varVariant,varUnknown,varShortInt,varByte,varWord,varLongWord,varInt64];
|
|
|
|
- end;
|
|
|
|
|
|
+ varCurrency,varOleStr,varDispatch,varError,varBoolean,
|
|
|
|
+ varVariant,varUnknown,varShortInt,varByte,varWord,varLongWord,varInt64]) or
|
|
|
|
+ FindCustomVariantType(aVarType,customvarianttype);
|
|
end;
|
|
end;
|
|
|
|
|
|
|
|
|
|
@@ -3383,7 +3377,6 @@ procedure DynArrayToVariant(var V: Variant; const DynArray: Pointer; TypeInfo: P
|
|
dynarriter : tdynarrayiter;
|
|
dynarriter : tdynarrayiter;
|
|
p : Pointer;
|
|
p : Pointer;
|
|
temp : Variant;
|
|
temp : Variant;
|
|
- variantmanager : tvariantmanager;
|
|
|
|
dynarraybounds : tdynarraybounds;
|
|
dynarraybounds : tdynarraybounds;
|
|
type
|
|
type
|
|
TDynArray = array of Pointer;
|
|
TDynArray = array of Pointer;
|
|
@@ -3398,8 +3391,6 @@ procedure DynArrayToVariant(var V: Variant; const DynArray: Pointer; TypeInfo: P
|
|
if (Dims>1) and not(DynamicArrayIsRectangular(DynArray,TypeInfo)) then
|
|
if (Dims>1) and not(DynamicArrayIsRectangular(DynArray,TypeInfo)) then
|
|
exit;
|
|
exit;
|
|
|
|
|
|
- GetVariantManager(variantmanager);
|
|
|
|
-
|
|
|
|
{ retrieve Bounds array }
|
|
{ retrieve Bounds array }
|
|
Setlength(dynarraybounds,Dims);
|
|
Setlength(dynarraybounds,Dims);
|
|
GetMem(vararraybounds,Dims*SizeOf(TVarArrayBound));
|
|
GetMem(vararraybounds,Dims*SizeOf(TVarArrayBound));
|
|
@@ -3466,7 +3457,7 @@ procedure DynArrayToVariant(var V: Variant; const DynArray: Pointer; TypeInfo: P
|
|
VarClear(temp);
|
|
VarClear(temp);
|
|
end;
|
|
end;
|
|
dynarriter.next;
|
|
dynarriter.next;
|
|
- variantmanager.VarArrayPut(V,temp,Dims,PLongint(iter.Coords));
|
|
|
|
|
|
+ VarArrayPut(V,temp,Slice(iter.Coords^,Dims));
|
|
until not(iter.next);
|
|
until not(iter.next);
|
|
finally
|
|
finally
|
|
iter.done;
|
|
iter.done;
|
|
@@ -3487,7 +3478,6 @@ procedure DynArrayFromVariant(var DynArray: Pointer; const V: Variant; TypeInfo:
|
|
dynarriter : tdynarrayiter;
|
|
dynarriter : tdynarrayiter;
|
|
temp : Variant;
|
|
temp : Variant;
|
|
dynarrvartype : LongInt;
|
|
dynarrvartype : LongInt;
|
|
- variantmanager : tvariantmanager;
|
|
|
|
vararraybounds : PVarArrayBoundArray;
|
|
vararraybounds : PVarArrayBoundArray;
|
|
dynarraybounds : tdynarraybounds;
|
|
dynarraybounds : tdynarraybounds;
|
|
i : SizeInt;
|
|
i : SizeInt;
|
|
@@ -3513,14 +3503,13 @@ procedure DynArrayFromVariant(var DynArray: Pointer; const V: Variant; TypeInfo:
|
|
dynarraybounds[i]:=vararraybounds^[i].ElementCount;
|
|
dynarraybounds[i]:=vararraybounds^[i].ElementCount;
|
|
end;
|
|
end;
|
|
DynArraySetLength(DynArray,TypeInfo,VarArrayDims,PSizeInt(dynarraybounds));
|
|
DynArraySetLength(DynArray,TypeInfo,VarArrayDims,PSizeInt(dynarraybounds));
|
|
- GetVariantManager(variantmanager);
|
|
|
|
VarArrayLock(V);
|
|
VarArrayLock(V);
|
|
try
|
|
try
|
|
iter.init(VarArrayDims,PVarArrayBoundArray(vararraybounds));
|
|
iter.init(VarArrayDims,PVarArrayBoundArray(vararraybounds));
|
|
dynarriter.init(DynArray,TypeInfo,VarArrayDims,dynarraybounds);
|
|
dynarriter.init(DynArray,TypeInfo,VarArrayDims,dynarraybounds);
|
|
if not iter.AtEnd then
|
|
if not iter.AtEnd then
|
|
repeat
|
|
repeat
|
|
- temp:=variantmanager.VarArrayGet(V,VarArrayDims,PLongint(iter.Coords));
|
|
|
|
|
|
+ temp:=VarArrayGet(V,Slice(iter.Coords^,VarArrayDims));
|
|
case dynarrvartype of
|
|
case dynarrvartype of
|
|
varSmallInt:
|
|
varSmallInt:
|
|
PSmallInt(dynarriter.data)^:=temp;
|
|
PSmallInt(dynarriter.data)^:=temp;
|