Вызов известного метода

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

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

    Lena_ki Гость

    В компонент OleConteiner на форме (среда С++ Builder 6) загружен AсtiveX. Мне известны все функции этого AсtiveX которые хранятся в его интерфейсах и их параметры. Как мне вызвать программно нужную мне функцию для этого ActiveX-а? Например, я знаю, что у него есть функция About() без параметров. Как организовать программно вызов этой родной функции для ActiveX-а, который загружен в OleConteiner?
    Спасибо.
     
  2. Lena_ki

    Lena_ki Гость

    Если имя метода к примеру AboutBox, то такой вариант сработал:
    OleContainer1->OleObject.OleProcedure("AboutBox"); и это работает – вижу AboutBox этого ActiveX.
    Другими не обязательными параметрами в OleProcedure передается список, который я прилагаю в рисунке. Как правильно использую второй аргумент TAutoArgsBase * args ф-ции OleProcedure сформировать вызов метода ActiveX у которого у самого есть параметры? Например у определенного ActiveX есть метод void Pan ( float, float ). Как правильно передать два параметра float в OleProcedure? Подскажите, как правильно сформировать строку:
    OleContainer1->OleObject.OleProcedure("Pan",www ,www); что поставить вместо www?
    Как в OleProcedure передавать любое нужное мне число параметров, которые есть в методах ActiveX? Хочу добиться возможности вызывать любые методы ActiveX который загружен в OleConteiner.


    P.S.
    Мой метод вызова все-таки не верный. Не все методы удается вызвать моим способом. Если для функции AboutBox все сработало то для других функций без параметров этого же ActiveX-а, таких как void Click ( ) или void DblClick ( ) или void MapViewChanged ( ) и других генерируется исключение в строках:
    OleContainer1->OleObject.OleFunction("Click")//или OleProcedure
    OleContainer1->OleObject.OleFunction("DblClick")//или OleProcedure
    OleContainer1->OleObject.OleFunction("MapViewChanged")//или OleProcedure
    Исключение: "Неизвестный тип".
    Может надо вызывать методы ActiveX загруженного в OleConteiner через IDispatch::Invoke? Как правильно оформить такой вызов?
    Спасибо
     

    Вложения:

    • 1.gif
      1.gif
      Размер файла:
      56,1 КБ
      Просмотров:
      78
  3. Lena_ki

    Lena_ki Гость

    Вопрос решен.
    В качестве примера берем ActiveX из папки System32 под названием vsf132.ocx.
    Теперь, просмотрев библиотеку типов беру, в качестве примера функцию этого же ActiveX с парметром short:
    [
    propget,
    id(0x00000127),
    helpstring("Sets or returns an autofill list."),
    helpcontext(0x000005F0)
    ]
    BSTR AutoFillItems(short Index );

    Вызов:
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {

    Variant par1;

    long v1 = Edit1->Text.ToInt();

    par1.vt = VT_I2;
    par1.iVal = v1;

    TAutoArgs<1> args;
    args[1] = par1;


    Form1->OleContainer1->OleObject.OleFunction("AutoFillItems",static_cast<TAutoArgsBase*>(&args));

    }

    Все работает.
     
Загрузка...
Похожие Темы - Вызов известного метода
  1. k85
    Ответов:
    0
    Просмотров:
    360
  2. alexas1
    Ответов:
    0
    Просмотров:
    506
  3. Sanchezz86
    Ответов:
    1
    Просмотров:
    588
  4. vln1981
    Ответов:
    0
    Просмотров:
    708
  5. JohnLemon
    Ответов:
    3
    Просмотров:
    870
Статус темы:
Закрыта.

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