2010-07-02 3 views
0

Inno Setup을 사용하여 응용 프로그램의 설치 프로그램을 만듭니다. 현재 콤보 상자 (TNewComboBox)에 현재 컴퓨터의 IIS 설치 웹 사이트 이름을 채우고 있습니다. 이제 내가하고 싶은 것은 combo의 objects 속성에 문자열과 함께 COM 객체를 저장하는 것이지만 TObject(xxx) 호출에서 COM 객체를 래핑 할 때도 형식 불일치 오류가 계속 발생합니다.어떻게 Inno Setup의 TNewComboBox.Objects 속성에 COM 개체를 저장할 수 있습니까?

다른 곳에서 TStrings 객체는 AddObject 메서드를 가져야한다는 것을 읽었지만 Inno Setup/Pascal Script에는없는 것 같습니다.

답변

2

클래스는 AddObject 메서드가 있지만 Inno의 PascalScript TStrings 래퍼 doesn't 인 것 같습니다. 그러나 다음과 같이 설정할 수 있습니다.

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

(델파이의 TStringList를이 기능이 "모두 할당 해제"부족) 아직도 그 오류는 객체에 내 변형을 캐스팅 할 때 나는 생각한다. 거기에 개체를 넣을 때 (예 : TObject.Create()와 같은) 잘 작동하므로 변형 된 개체를 만드는 방법은 궁금합니다. 나중에 변형을 다시 얻을 수 있습니까? –

+2

또한 자신의 COM 개체를 저장하기 위해 자신 만의 Variant 배열 (PascalScript에서 가능합니다)을 사용할 수도 있습니다. 그런 다음 각 콤보 상자 항목에 해당 COM 개체가 있고 개체 속성을 사용할 필요가 없습니다. –

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

나중에 그것을 해제하는 것을 잊지 마세요 불행하게도

+0

InnoSetup에서 사용할 수없는 것으로 보입니다. 나는 5.5.4를 사용하고있다. –