2010-07-02 5 views
0

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

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

ответ

2

Delphi's TStrings класс есть AddObject способ, но похоже, что Inno's PascalScript TStrings обертка doesn't. Тем не менее, вы должны иметь возможность установить его так:

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

К сожалению, все еще ошибки, я думаю, когда он пытается бросить свой вариант к объекту. Он отлично работает, когда я помещаю туда объект (например, TObject.Create()), поэтому, я думаю, вопрос заключается в том, как я могу создать объект из варианта и могу ли я снова получить вариант назад? –

+2

Вы также можете попытаться использовать свой собственный массив вариантов (я предполагаю, что это возможно в PascalScript) для хранения ваших COM-объектов. Тогда каждый элемент combobox будет иметь соответствующий COM-объект, и вам не нужно использовать свойство Objects. –

+0

(Вы не можете придать тип варианту объекту.) –

4

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

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, не хватает «освободить всех» функциональность)

+0

, похоже, мы не сможем использовать это в InnoSetup. Я использую 5.5.4. –