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

  • Автор темы Lena_ki
  • Дата начала
Статус
Закрыто для дальнейших ответов.
L

Lena_ki

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

Lena_ki

#2
Если имя метода к примеру 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? Как правильно оформить такой вызов?
Спасибо
 

Вложения

  • 56.1 КБ Просмотры: 78
L

Lena_ki

#3
Вопрос решен.
В качестве примера берем 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));

}

Все работает.
 
Статус
Закрыто для дальнейших ответов.