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

をにキャストしVariantarray 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 2 および 3 ではなく、Delphi 2009 でコンパイルされているためです。Delphi 2 および 3の方が Variant サポートが優れている可能性があります。Inno Setup の Ansi から Unicode バージョンへのアップグレード (欠点)も参照してください。

于 2015-12-16T18:31:56.140 に答える
-1

スクリプト言語が Free Pascal に基づいていることを覚えている限り、Inno は Delphi を完全にはサポートしていません。

次のことを試してください。

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