1

我正在尝试使用 Inno Setup 读取和写入 IIS 6 元数据库。
我不知道如何访问数组。

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 函数完全访问数组?

4

2 回答 2

1

您可以Variant转换 to 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 升级到 Inno Setup 的 Unicode 版本(任何缺点)

于 2015-12-16T18:31:56.140 回答
-1

Inno 不提供完整的 Delphi 支持,据我记得脚本语言是基于 Free Pascal。

尝试以下操作:

 for I := 0 to  GetArrayLength(myArray) - 1 do
  begin
     //stuff
  end;   
于 2015-12-16T17:17:50.753 回答