Как использовать массивы вариантов в Delphi
У меня есть две программы Delphi7: сервер автоматизации COM (EXE) и другая программа, которая использует сервер автоматизации.
Мне нужно передать массив байтов из одной программы в другую.
после некоторого поиска я обнаружил, что использование вариантных массивов-это путь (исправьте меня, пожалуйста, если вы знаете какие-либо лучшие методы).
мой вопрос: Как создать массив вариантов в одной программе, а затем как прочитать его значения в другие?
Я знаю о VarArrayCreate и VarArrayLowBound / VarArrayHighBound, но я не уверен, как это сделать правильно.
спасибо!
2 ответов
вы создаете это так:
заявления первого
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:
массив должен быть создан только один раз. Затем просто использовать его, как показано в приведенном выше примере.
для другой стороны:
(предполагая, что значение является параметром 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;  
