20

2つのDelphi7プログラムがあります。COM自動化サーバー(EXE)と、自動化サーバーを使用しているもう1つのプログラムです。

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

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

私の質問は、一方のプログラムでバリアント配列を作成し、もう一方のプログラムでその値を読み取るにはどうすればよいですか?

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

ありがとう!

4

2 に答える 2

29

次のように作成します。

最初の宣言

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;

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

VarClear(VarArray);

それがすべてです。別の例については、公式のEmbracaderoヘルプをご覧ください。

編集:

アレイは1回だけ作成する必要があります。次に、上記の例のように使用します。

于 2010-09-01T17:55:31.773 に答える
7

反対側の場合:

(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;  
于 2010-09-01T20:13:46.503 に答える