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
    Как вариант ... стоит несколько адаптировать к Вашему случаю ...

    Код (Text):
    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;
    Код (Text):
    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.034
    Симпатии:
    7
    <!--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.770
  2. brewer
    Ответов:
    1
    Просмотров:
    1.632
  3. Dumm
    Ответов:
    1
    Просмотров:
    1.499
  4. andrey24
    Ответов:
    0
    Просмотров:
    2.117
  5. Vadik(R)
    Ответов:
    7
    Просмотров:
    4.196
Статус темы:
Закрыта.

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