バイト配列をバリアントに変換するには? バイトの配列を受け取る必要がある WebService がありますが、VARIANT 型の変数しか受け入れません。Web サービスのパラメーターとして渡すために変換する方法を知りたいです。
ありがとうございました
SAFEARRAY
コメント トレイルによると、バイト数を作成する必要があります。これは、Delphi では次のように行われます。
V := VarArrayCreate([0, N-1], varByte);
または、 にSAFEARRAY
1 ベースのインデックスが必要な場合:
V := VarArrayCreate([1, N], varByte);
その後、 を使用してループ内で配列を設定できますV[i] := ...
。
Delphi の dynamicarray 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]));