我尝试使用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();
元数据库编辑器调用对象类型I尝试访问"多字符串"。
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函数完全访问数组?
答案 0 :(得分:1)
您可以将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支持。另请参阅Upgrading from Ansi to Unicode version of Inno Setup (any disadvantages)。
答案 1 :(得分:-1)
Inno并不提供完整的Delphi支持,据我所知,脚本语言基于Free Pascal。
尝试以下方法:
for I := 0 to GetArrayLength(myArray) - 1 do
begin
//stuff
end;