Inno setup Inno设置:遍历Variant类型的数组(从OleObject)

Inno setup Inno设置:遍历Variant类型的数组(从OleObject),inno-setup,ole,variant,pascalscript,iis-metabase,Inno Setup,Ole,Variant,Pascalscript,Iis Metabase,我正在尝试使用Inno安装程序读取和写入IIS 6元数据库。 但我不知道如何访问阵列 IIS:=CreateOleObject('IISNamespace'); Compr:=IIS.GetObject('IIsCompressionScheme','localhost/W3SVC/Filters/Compression/deflate'); Arr:=Compr.HcScriptFileExtensions; {…[迭代和添加项的代码]此处…} 压缩设置信息(); 元数据库编辑器调用我试图访

我正在尝试使用Inno安装程序读取和写入IIS 6元数据库。
但我不知道如何访问阵列

IIS:=CreateOleObject('IISNamespace');
Compr:=IIS.GetObject('IIsCompressionScheme','localhost/W3SVC/Filters/Compression/deflate');
Arr:=Compr.HcScriptFileExtensions;
{…[迭代和添加项的代码]此处…}
压缩设置信息();
元数据库编辑器调用我试图访问的对象类型为“多字符串”

VarType(Arr)
生成0x200C作为类型(请参阅)

我如何处理这种类型的变量?Delphi支持以下内容

对于I:=varrarylowbound(Arr,1)到varraryhighbound(Arr,1)do

但Inno安装程序没有。或者我必须通过一些OLE/COM函数完全访问阵列吗?

据我所知,Inno不提供完全的Delphi支持,脚本语言基于免费的Pascal

请尝试以下操作:

 for I := 0 to  GetArrayLength(myArray) - 1 do
  begin
     //stuff
  end;   

Inno不提供完全的Delphi支持,据我记忆所及,脚本语言基于免费的Pascal

请尝试以下操作:

 for I := 0 to  GetArrayLength(myArray) - 1 do
  begin
     //stuff
  end;   

您可以将
变量
强制转换为字符串的
数组
,读取和写入数组,然后强制转换回:

var
变异体:变异体;
计数:整数;
ArrayOfString:字符串的数组;
I:整数;
开始
{ ... }
VariantArray:=Compr.HcScriptFileExtensions;
{Cast to array}
ArrayOfString:=变量数组;
{读取数组}
计数:=GetArrayLength(ArrayOfString);
日志(格式('Count=%d',[Count]);
对于I:=0进行计数-1 do
开始
日志(格式(“%d:%s”,[I,ArrayOfStrings[I]]);
结束;
{修改数组(追加元素)}
SetArrayLength(ArrayOfString,计数+1);
ArrayOfString[Count]:=“新字符串”;
{回溯到变体}
VariantArray:=数组字符串;
...
结束;

只能在Unicode版本的Inno安装程序中使用。可能是因为是用Delphi 2009而不是Delphi 2和3编译的,Delphi 2和3可能有更好的变体支持。另请参见。

您可以将
变量
强制转换为
字符串数组
,读取和写入数组,然后强制转换:

var
变异体:变异体;
计数:整数;
ArrayOfString:字符串的数组;
I:整数;
开始
{ ... }
VariantArray:=Compr.HcScriptFileExtensions;
{Cast to array}
ArrayOfString:=变量数组;
{读取数组}
计数:=GetArrayLength(ArrayOfString);
日志(格式('Count=%d',[Count]);
对于I:=0进行计数-1 do
开始
日志(格式(“%d:%s”,[I,ArrayOfStrings[I]]);
结束;
{修改数组(追加元素)}
SetArrayLength(ArrayOfString,计数+1);
ArrayOfString[Count]:=“新字符串”;
{回溯到变体}
VariantArray:=数组字符串;
...
结束;

只能在Unicode版本的Inno安装程序中使用。可能是因为是用Delphi 2009而不是Delphi 2和3编译的,Delphi 2和3可能有更好的变体支持。另请参见。

您不能在
Variant
上调用
GetArrayLength
。您收到运行时错误“无法调用proc”。我的错误是,我假设字符串数组。您无法在
Variant
上调用
GetArrayLength
。您得到运行时错误“无法调用proc”。我的错误是,我假设字符串数组。这会引发“类型不匹配”异常(ArrayOfStrings:=VariantArray)。我使用的是Ansi版本(或者更准确地说:启动此项目的开发人员)。它与Unicode版本配合得很好,因此我将移植安装程序(反正已经在我的日程上了)。谢谢!好消息。我已将此信息添加到答案中。这会引发“类型不匹配”异常(ArrayOfStrings:=VariantArray)。我使用的是Ansi版本(或者更准确地说,是启动此项目的开发人员)。它与Unicode版本配合得很好,因此我将移植安装程序(反正已经在我的日程上了)。谢谢!好消息。我已将此信息添加到答案中。