web-dev-qa-db-ja.com

Delphiでバリアント配列を使用する方法

2つのDelphi7プログラムがあります。COMオートメーションサーバー(EXE)と、オートメーションサーバーを使用している他のプログラムです。

1つのプログラムから別のプログラムにバイトの配列を渡す必要があります。

いくつか検索した後、バリアント配列を使用するのがよい方法であることがわかりました(より良い方法を知っている場合は訂正してください)。

私の質問は、どのようにして1つのプログラムでバリアント配列を作成し、次に他のプログラムでその値を読み取るのですか?

VarArrayCreateとVarArrayLowBound/VarArrayHighBoundについては知っていますが、これを適切に行う方法がわかりません。

ありがとう!

19
Steve

あなたはそれをそのように作成します:

最初の宣言

var
  VarArray: Variant;
  Value: Variant;

次に作成:

VarArray := VarArrayCreate([0, Length - 1], varVariant);

またはあなたも持つことができます

VarArray := VarArrayCreate([0, Length - 1], varInteger);

データのタイプによって異なります。次に、次のように繰り返します。

i := VarArrayLowBound(VarArray, 1);
HighBound := VarArrayHighBound(VarArray, 1);

while i <= HighBound do
begin
  Value := VarArray[i];
  ... do something ...
  Inc(i);
end;

最後に、不要になった配列をクリアします。編集:(これはオプションです、 を参照してください)Delphi 2009では、バリアント配列を解放する必要がありますか?

VarClear(VarArray);

これですべてです。別の例については、公式 Embracadero Help をご覧ください

編集:

配列は一度だけ作成する必要があります。次に、上の例のように使用します。

27
Runner

反対側の場合:

(ValueがVariantパラメーターであり、要素タイプがWideStringであると想定)

var
  Source: PWideStringArray;

if VarIsArray(Value) then begin
  Source:= VarArrayLock(Value);
  try
    for i:= 0 to TVarData(Value).VArray^.Bounds[0].ElementCount - 1 do
      DoWhatEverYouWantWith(Source^[i]);
    end;
  finally
    VarArrayUnlock(Value);
  end;
end;  
7
Uwe Raabe