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