1. Уважаемые участники и гости, 19 октября codeby будет работать в режиме "Только чтение". Регистрация новых участников будет закрыта. 20 октября портал продолжит работу в прежнем режиме.

Activex

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем Lena_ki, 7 сен 2006.

Статус темы:
Закрыта.
  1. Lena_ki

    Lena_ki Гость

    Репутация:
    0
    Как осуществить следующее:
    При нажатии на кнопку, надо вывести в список все зарегистрированные на компьютере ActiveX. Спасибо.
     
  2. Lena_ki

    Lena_ki Гость

    Репутация:
    0
    Список AxtiveX получить и загрузить удалось.
    Кто знает, подскажите, как можно загрузить в отдельный список методы объекта ActiveX загруженного в OleConteiner?
     
  3. Barmutik

    Barmutik Гость

    Репутация:
    0
    Как вариант ... стоит несколько адаптировать к Вашему случаю ...

    Код:
    procedure ListTypeInfo(ClassID: TGUID; List: TStrings); 
    var 
    Obj: IDispatch; 
    TypeInfo: ITypeInfo; 
    TypeAttr: PTypeAttr; 
    iCnt: integer; 
    begin 
    Obj := CreateComObject(ClassID) as IDispatch; 
    Obj.GetTypeInfoCount(iCnt); 
    if iCnt > 0 then 
    begin 
    Obj.GetTypeInfo(0, 0, TypeInfo); 
    OleCheck(TypeInfo.GetTypeAttr(TypeAttr)); 
    try 
    if (TypeAttr.typeKind in [TKIND_DISPATCH, TKIND_INTERFACE]) then 
    LoadInterface(TypeInfo, TypeAttr, List); 
    finally 
    TypeInfo.ReleaseTypeAttr(TypeAttr); 
    end; 
    end; 
    end;
    Код:
    procedure LoadInterface(TypeInfo: ITypeInfo; TypeAttr: PTypeAttr; List: 
    TStrings); 
    var 
    AName: WideString; 
    ADocString: WideString; 
    AHelpContext: LongInt; 
    FuncDesc: PFuncDesc; 
    i, j: Integer; 
    Names: PBStrList; 
    cNames: Integer; 
    strItem: string; 
    begin 
    TypeInfo.GetDocumentation(-1, @AName, @ADocString, @AHelpContext, nil); 
    
    
    New(Names); 
    try 
    // load functions 
    for i := 0 to TypeAttr.cFuncs - 1 do 
    begin 
    TypeInfo.GetFuncDesc(i, FuncDesc); 
    try 
    TypeInfo.GetDocumentation(FuncDesc.memid, @AName, @ADocString, 
    @AHelpContext, nil); 
    
    strItem := AName; 
    
    if FuncDesc.cParams > 0 then 
    begin 
    // load parameters 
    TypeInfo.GetNames(FuncDesc.memid, Names, SizeOf(TBStrList), 
    cNames); 
    strItem := strItem + '('; 
    
    
    // Skip Names[0] - it's the function name 
    for j := 1 to FuncDesc.cParams do 
    if j < 2 then 
    strItem := strItem + Names[j] 
    else 
    strItem := strItem + ', ' + Names[j]; 
    strItem := strItem + ')'; 
    end; 
    
    if (ADocString <> '') then 
    strItem := strItem + #9 + ADocString; 
    list.Add(strItem); 
    finally 
    TypeInfo.ReleaseFuncDesc(FuncDesc); 
    end; 
    end; 
    finally 
    Dispose(Names); 
    end; 
    end;

    Может несколько придётся переиначить.. но общий смысл таков ...
     
  4. Lena_ki

    Lena_ki Гость

    Репутация:
    0
    Большое спасибо за помощь!
    Попробую разобраться и перевести код на С++ Builder.
     
  5. Barmutik

    Barmutik Гость

    Репутация:
    0
    Удачи! Всё больше девушек(женщин) вступает в ряды программистов :)
     
  6. Kmet

    Kmet Well-Known Member
    Java Team

    Репутация:
    0
    Регистрация:
    25 май 2006
    Сообщения:
    1.036
    Симпатии:
    8
    <!--QuoteBegin-Barmutik+8:09:2006, 13:40 -->
    <span class="vbquote">(Barmutik @ 8:09:2006, 13:40 )</span><!--QuoteEBegin-->Удачи! Всё больше девушек(женщин) вступает в ряды программистов
    [snapback]43464" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    К сожелению в моем отделе это не ощущается =(
     
  7. Barmutik

    Barmutik Гость

    Репутация:
    0
    У нас на фирме тоже :)
     
  8. Lena_ki

    Lena_ki Гость

    Репутация:
    0
    Barmutik, подскажите, а то не могу разобраться в справке, что делает ф-ция GetTypeInfo?
    А GetTypeInfoCount что считает кол-во интерфейсов в объекте COM?
     
  9. Barmutik

    Barmutik Гость

    Репутация:
    0
    Привожу выдержку из MSDN...

    Получает информацию о типе для dual интерфейса.. в нашем случае мы получаем информацию о IDIspatch..
     
  10. Lena_ki

    Lena_ki Гость

    Репутация:
    0
    Не получается разобраться с кодом выше. :(
    Не могу понять логику получения методов ActiveX.
    У меня есть ActiveX загруженный в OleConteiner. Какова последовательность действий по пунктам:
    1. Создаю указатель на объект ActiveX на его часть IDispatch
    //С++ Builder 6
    IDispatch * pDispU = NULL;
    pDispU->CreateOleObject(NameOfClass); // NameOfClass имя класса моего ActiveX
    2. Надо получить доступы к интерфейсам в этом ActiveX
    3. Потом просмотреть методы, содержащиеся в этих интерфейсах и вывести их в список.
    Для пункта 2 что надо сделать?
    Спасибо.
     
  11. Lena_ki

    Lena_ki Гость

    Репутация:
    0
Загрузка...
Похожие Темы - Activex
  1. roddm
    Ответов:
    21
    Просмотров:
    2.816
  2. brewer
    Ответов:
    1
    Просмотров:
    1.709
  3. Dumm
    Ответов:
    1
    Просмотров:
    1.514
  4. andrey24
    Ответов:
    0
    Просмотров:
    2.125
  5. Vadik(R)
    Ответов:
    7
    Просмотров:
    4.216
Статус темы:
Закрыта.

Поделиться этой страницей