Inno Setup: перебирать массив типа Variant (из OleObject)
Я пытаюсь читать и писать в метабазу IIS 6 с помощью Inno Setup.
Я не могу понять, как получить доступ к массивам, хотя.
IIS := CreateOleObject('IISNamespace');
Compr := IIS.GetObject('IIsCompressionScheme', 'localhost/W3SVC/Filters/Compression/deflate');
Arr := Compr.HcScriptFileExtensions;
{ ... [code to iterate and add items] here ... }
Compr.SetInfo();
Редактор метабазы вызывает объект типа, который я пытаюсь получить доступ к "многострочный".
VarType(Arr)
выдает 0x200C как тип (см. http://www.jrsoftware.org/ishelp/topic_isxfunc_vartype.htm)
Как я могу работать с такими типами переменных? Delphi поддерживает что-то вроде
for I := VarArrayLowBound(Arr, 1) to VarArrayHighBound(Arr, 1) do
но Inno Setup нет. Или я должен получить доступ к массиву полностью через некоторые OLE/COM-функции?
2 ответа
Вы можете разыграть Variant
в array of string
прочитайте и запишите массив, а затем приведите обратно:
var
VariantArray: Variant;
Count: Integer;
ArrayOfStrings: array of string;
I: Integer;
begin
{ ... }
VariantArray := Compr.HcScriptFileExtensions;
{ Cast to array }
ArrayOfStrings := VariantArray;
{ Read the array }
Count := GetArrayLength(ArrayOfStrings);
Log(Format('Count = %d', [Count]));
for I := 0 to Count - 1 do
begin
Log(Format('%d: %s', [I, ArrayOfStrings[I]]));
end;
{ Modify the array (append element) }
SetArrayLength(ArrayOfStrings, Count + 1);
ArrayOfStrings[Count] := 'new string';
{ Cast back to the variant }
VariantArray := ArrayOfStrings;
...
end;
Работает только в версии Inno Setup для Unicode. Вероятно, потому что Unicode Inno Setup скомпилирован с Delphi 2009 вместо Delphi 2 и 3, которые, вероятно, имеют лучшую поддержку Variant. См. Также Обновление от Ansi до Unicode-версии Inno Setup (любые недостатки).
Inno не предоставляет полной поддержки Delphi, насколько я помню, язык сценариев основан на Free Pascal.
Попробуйте следующее:
for I := 0 to GetArrayLength(myArray) - 1 do
begin
//stuff
end;