如何将字节数组转换为变体?我有一个应该接收到字节数组的Web服务,但是它仅接受类型变体的变量,我想知道如何转换以将其作为Web服务的参数传递。
谢谢
根据注释跟踪,您需要创建一个字节的SAFEARRAY
。在Delphi中这样做的是:
V := VarArrayCreate([0, N-1], varByte);
或,如果SAFEARRAY
需要1个基于1个索引:
V := VarArrayCreate([1, N], varByte);
然后,您可以使用V[i] := ...
填充循环中的数组。
如果您有Delphi Dynamic 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个基于1个索引:
V := VarArrayCreate([1,Length(a)], varByte);
SafeArray := VarArrayAsPSafeArray(V);
Move(Pointer(a)^, SafeArray.Data^, Length(a)*SizeOf(a[0]));