2010-07-02 15 views
0

J'utilise Inno Setup pour créer un programme d'installation pour mon application. Je remplis actuellement une zone de liste déroulante (TNewComboBox) avec les noms des sites Web sur l'installation IIS de la machine actuelle. Maintenant, ce que je veux vraiment faire est de stocker l'objet COM à côté de la chaîne dans la propriété objets de la liste déroulante mais continuer à obtenir des erreurs d'incompatibilité de type, même lors de l'appel entrant TObject(xxx).Comment puis-je stocker un objet COM dans la propriété TNewComboBox.Objects de Inno Setup?

J'ai lu à d'autres endroits que l'objet TStrings devrait avoir une méthode AddObject mais il ne semble pas être présent dans Inno Setup/Pascal Script.

Répondre

2

La classe TStrings de Delphi possède la méthode AddObject mais il semble que l'encapsuleur PascalScript de Inno soit doesn't. Cependant, vous devriez pouvoir le régler comme ceci:

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

Malheureusement, ce encore des erreurs, je pense que quand il essaie de jeter ma variante à un objet. Cela fonctionne bien quand j'y place un objet (comme TObject.Create() par exemple), donc je suppose que la question est de savoir comment créer un objet à partir d'une variante et puis-je récupérer la variante plus tard? –

+2

Vous pouvez également essayer d'utiliser votre propre tableau de Variants (je suppose que c'est possible dans PascalScript) pour stocker vos objets COM. Ensuite, chaque élément de zone de liste déroulante possède un objet COM correspondant et vous n'avez pas besoin d'utiliser la propriété Objects. –

+0

(Vous ne pouvez pas convertir une variante en objet pour un objet.) –

4

Ne pas lancer, il suffit de l'envelopper dans un objet.

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

Ne pas oublier de le libérer par la suite (le TStringList de Delphi manque la fonctionnalité « liberer tous »)

+0

il semblerait que nous ne pouvons pas utiliser cela dans InnoSetup. J'utilise 5.5.4. –