Delphi 如何在Inno Setup';中存储COM对象;s TNEWCOMBOX.Objects属性?

Delphi 如何在Inno Setup';中存储COM对象;s TNEWCOMBOX.Objects属性?,delphi,inno-setup,pascalscript,Delphi,Inno Setup,Pascalscript,我正在使用Inno安装程序为我的应用程序创建安装程序。我当前正在用当前计算机IIS安装上的网站名称填充一个组合框(TNewComboBox)。现在,我真正想做的是将COM对象存储在组合的objects属性中的字符串旁边,但不断出现类型不匹配错误,即使在TObject(xxx)调用中包装COM对象也是如此 我在其他地方读到过,TStrings对象应该有一个AddObject方法,但它似乎没有出现在Inno设置/Pascal脚本中。Delphi的TStrings类确实有方法,但Inno的Pascal

我正在使用Inno安装程序为我的应用程序创建安装程序。我当前正在用当前计算机IIS安装上的网站名称填充一个组合框(
TNewComboBox
)。现在,我真正想做的是将COM对象存储在组合的objects属性中的字符串旁边,但不断出现类型不匹配错误,即使在
TObject(xxx)
调用中包装COM对象也是如此


我在其他地方读到过,
TStrings
对象应该有一个
AddObject
方法,但它似乎没有出现在Inno设置/Pascal脚本中。

Delphi的
TStrings
类确实有方法,但Inno的PascalScript TStrings包装器似乎有方法。但是,您应该可以这样设置:

  Index := Strings.Add('text');
  Strings.Objects[Index] := TObject(xxx);

Delphi的
TStrings
类确实有方法,但似乎Inno的PascalScript TStrings包装器。但是,您应该可以这样设置:

  Index := Strings.Add('text');
  Strings.Objects[Index] := TObject(xxx);

不要投射,只需将其包裹在一个对象中

 Type
     TMyObjectForStringList = class 
                                fCOMThingy : variant;   // or ole variant
                                constructor create(comthingy:variant); 
                               end;

  constructor TMyObjectForStringList.Create(comthingy:variant);
  begin
    fcomthingy:=comthingy;
  end;

 myStringList.addobject(astring,TMyObjectForStringList.Create(avariant));

不要忘记在之后释放它(Delphi的tstringlist缺少“全部解除分配”功能)

不要强制转换,只需将其包装在一个对象中即可

 Type
     TMyObjectForStringList = class 
                                fCOMThingy : variant;   // or ole variant
                                constructor create(comthingy:variant); 
                               end;

  constructor TMyObjectForStringList.Create(comthingy:variant);
  begin
    fcomthingy:=comthingy;
  end;

 myStringList.addobject(astring,TMyObjectForStringList.Create(avariant));

不要忘记在之后释放它(Delphi的tstringlist缺少“全部解除分配”功能)

不幸的是,当它试图将我的变体强制转换为对象时,仍然会出现错误。当我将一个对象放在其中时,它可以正常工作(例如TObject.Create()),所以我想问题是如何从一个变量创建一个对象,我可以稍后再获取该变量吗?您也可以尝试使用您自己的变量数组(我假设这在PascalScript中是可能的)来存储COM对象。然后,每个combobox项都会有一个对应的COM对象,您不需要使用Objects属性。(您不能向对象键入变体。)@X-Ray Automation COM对象会暴露
IDispatch
接口,该接口可以存储在变体中。不幸的是,当它尝试将我的变体强制转换为对象时,我认为仍然会出现错误。当我将一个对象放在其中时,它可以正常工作(例如TObject.Create()),所以我想问题是如何从一个变量创建一个对象,我可以稍后再获取该变量吗?您也可以尝试使用您自己的变量数组(我假设这在PascalScript中是可能的)来存储COM对象。然后,每个combobox项都会有一个对应的COM对象,您不需要使用Objects属性。(您不能将变体类型转换为对象。)@X-Ray Automation COM对象将显示可存储在变体中的IDispatch接口。似乎我们无法在InnoSetup中使用该接口。我使用的是5.5.4。看来我们不能在InnoSetup中使用它。我用的是5.5.4。