将变体数组转换为动态数组

时间:2012-07-03 10:59:40

标签: arrays delphi

我正在尝试将变量数组(双精度数,但它可能是我猜的任何数据)转换为动态数组。我通常使用DynArrayFromVariant和DynArrayToVariant过程,但在这种情况下,我的变体数组是基于1的。这两个函数似乎只适用于基于0的数组。知道如何做我需要做的事吗?

1 个答案:

答案 0 :(得分: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;