Полная версия этой страницы:
Вызов известного метода
Lena_ki
20:09:2006, 05:55
В компонент OleConteiner на форме (среда С++ Builder 6) загружен AсtiveX. Мне известны все функции этого AсtiveX которые хранятся в его интерфейсах и их параметры. Как мне вызвать программно нужную мне функцию для этого ActiveX-а? Например, я знаю, что у него есть функция About() без параметров. Как организовать программно вызов этой родной функции для ActiveX-а, который загружен в OleConteiner?
Спасибо.
Lena_ki
25:09:2006, 07:09
Если имя метода к примеру 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? Как правильно оформить такой вызов?
Спасибо
Lena_ki
12:10:2006, 06:19
Вопрос решен.
В качестве примера берем 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));
}
Все работает.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.