Подтвердить что ты не робот

Как использовать варианты массивов в Delphi

У меня есть две программы Delphi7: сервер автоматизации COM (EXE) и другая программа, использующая сервер автоматизации.

Мне нужно передать массив байтов из одной программы в другую.

После некоторых поисков я обнаружил, что использование вариантов массивов - это путь (поправьте меня, если вы знаете какие-либо лучшие методы).

Мой вопрос: Как создать вариантный массив в одной программе, а затем как узнать его значения в другом?

Я знаю о VarArrayCreate и VarArrayLowBound/VarArrayHighBound, но я не уверен, как это сделать правильно.

Спасибо!

4b9b3361

Ответ 1

Вы создаете его так:

Объявления сначала

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;

Наконец, вы очищаете массив, когда он вам больше не нужен. EDIT: (Это необязательно, см. В Delphi 2009 мне нужны бесплатные варианты массивов?)

VarClear(VarArray);

Вот и все. В качестве другого примера посмотрите официальный Справка Embracadero

EDIT:

Массив должен быть создан только один раз. Затем просто используйте его, как показано в приведенном выше примере.

Ответ 2

Для другой стороны:

(предполагается, что 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;