如何将字节数组转换为变体



如何将字节数组转换为变体?我有一个应该接收到字节数组的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]));

相关内容

  • 没有找到相关文章

最新更新