根据评论线索,您需要创建一个SAFEARRAY
字节数。在 Delphi 中是这样完成的:
V := VarArrayCreate([0, N-1], varByte);
或者,如果SAFEARRAY
需要从 1 开始的索引:
V := VarArrayCreate([1, N], varByte);
然后,您可以使用以下方式在循环中填充数组V[i] := ...
.
如果您有德尔福动力array of Byte
,以及预期的SAFEARRAY
使用从0开始的索引,那么你可以简单地写:
V := a;
如果您有大量数据需要传输,那么逐个元素地提取 RTL 提供的数据几乎是没有希望的。即使是简单的v := a
这种方法会导致逐个元素的复制,这对于大量数据来说会非常慢。
在你的位置上,我会一次性删除数组。像这样:
var
i: Integer;
a: array of Byte;
V: Variant;
SafeArray: PVarArray;
....
// populate a
V := VarArrayCreate([0,high(a)], varByte);
SafeArray := VarArrayAsPSafeArray(V);
Move(Pointer(a)^, SafeArray.Data^, Length(a)*SizeOf(a[0]));
或者,如果您需要使用从 1 开始的索引:
V := VarArrayCreate([1,Length(a)], varByte);
SafeArray := VarArrayAsPSafeArray(V);
Move(Pointer(a)^, SafeArray.Data^, Length(a)*SizeOf(a[0]));