Как я могу сохранить COM-объект в свойстве TNewComboBox.Objects Inno Setup?

Я использую Inno Setup для создания установщика для своего приложения. В настоящее время я заполняю поле со списком (TNewComboBox) именами веб-сайтов на текущей машине с установленной IIS. Теперь то, что я действительно хочу сделать, это сохранить COM-объект вместе со строкой в ​​​​свойстве объектов комбо, но продолжать получать ошибки несоответствия типов, даже при обертывании COM-объекта в вызове TObject(xxx).

Я читал в других местах, что объект TStrings должен иметь метод AddObject, но, похоже, его нет в Inno Setup/Pascal Script.


person Chris Meek    schedule 02.07.2010    source источник


Ответы (2)


Класс Delphi TStrings имеет метод AddObject, но кажется, что Inno PascalScript TStrings оболочка нет. Тем не менее, вы должны иметь возможность установить его следующим образом:

  Index := Strings.Add('text');
  Strings.Objects[Index] := TObject(xxx);
person Ondrej Kelle    schedule 02.07.2010
comment
К сожалению, это все еще ошибки, я думаю, когда он пытается привести мой вариант к объекту. Он отлично работает, когда я помещаю туда объект (например, TObject.Create()), поэтому я предполагаю, что вопрос в том, как создать объект из варианта и могу ли я снова получить вариант позже? - person Chris Meek; 02.07.2010
comment
Вы также можете попробовать использовать свой собственный массив вариантов (я предполагаю, что это возможно в PascalScript) для хранения ваших COM-объектов. Тогда каждый элемент списка будет иметь соответствующий COM-объект, и вам не нужно использовать свойство Objects. - person Ondrej Kelle; 02.07.2010
comment
(Вы не можете привести вариант к объекту.) - person X-Ray; 26.06.2014
comment
COM-объекты @X-Ray Automation предоставляют IDispatch интерфейс, который может храниться в Variants. - person Ondrej Kelle; 04.07.2014

Не бросайте, просто оберните его в объект.

 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));

Не забудьте после этого освободить его (в tstringlist Delphi отсутствует функция «освобождения всего»).

person Marco van de Voort    schedule 02.07.2010
comment
похоже, мы не можем использовать это в InnoSetup. Я использую 5.5.4. - person X-Ray; 26.06.2014