1
我試圖將一個變體數組(雙精度數,但它可以是我猜測的任何數)轉換爲動態數組。我通常使用DynArrayFromVariant和DynArrayToVariant過程,但在這種情況下,我的變體陣列是基於1的。這兩個函數似乎只適用於基於0的數組。任何想法我怎麼能做我需要做的事情?將變體數組轉換爲動態數組
我試圖將一個變體數組(雙精度數,但它可以是我猜測的任何數)轉換爲動態數組。我通常使用DynArrayFromVariant和DynArrayToVariant過程,但在這種情況下,我的變體陣列是基於1的。這兩個函數似乎只適用於基於0的數組。任何想法我怎麼能做我需要做的事情?將變體數組轉換爲動態數組
如果你知道你的數組元素的類型,你可以編寫更高效(而較少通用)代碼:
function DoubleDynArrayFromVarArray(const V: Variant): TDoubleDynArray;
var
P: Pointer;
Count: Integer;
begin
Result := nil;
if not VarIsArray(V) or (VarType(V) and varTypeMask <> varDouble) or
(VarArrayDimCount(V) <> 1) then
raise EVariantInvalidArgError.Create(SVarInvalid);
Count := VarArrayHighBound(V, 1) - VarArrayLowBound(V, 1) + 1;
if Count = 0 then
Exit;
P := VarArrayLock(V);
try
SetLength(Result, Count);
Move(P^, Result[0], Count * SizeOf(Double));
finally
VarArrayUnlock(V);
end;
end;
調用SetLength分配動態數組,然後用一個for循環填充它 –