2012-07-03 31 views
1

我試圖將一個變體數組(雙精度數,但它可以是我猜測的任何數)轉換爲動態數組。我通常使用DynArrayFromVariant和DynArrayToVariant過程,但在這種情況下,我的變體陣列是基於1的。這兩個函數似乎只適用於基於0的數組。任何想法我怎麼能做我需要做的事情?將變體數組轉換爲動態數組

+1

調用SetLength分配動態數組,然後用一個for循環填充它 –

回答

8

如果你知道你的數組元素的類型,你可以編寫更高效(而較少通用)代碼:

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;