Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: CL | DM;

Вниз

Как выполнить любой метод?   Найти похожие ветки 

 
Dmitry S ©   (2008-08-31 23:05) [0]

Есть строка MethodName: WideString;
Есть объект SomeObject: IDispatch;
Как выполнить метод MethodName данного объекта?

Пробовал примерно так:
Var
 Obj: OleVariant;
begin
 Obj := SomeObject;
 Obj[SomeMethod](...);
end;

Но компилятор ругается на то, что SomeMethod должно быть числом.


 
Eraser ©   (2008-09-01 00:59) [1]

Obj.SomeMethod();


 
Сергей М. ©   (2008-09-01 08:15) [2]

1. Получить Id метода (см. IDispatch.GetIdsOfNames)
2. Вызвать метод по полученному выше Id (см. IDispatch.Invoke)


 
Dmitry S ©   (2008-09-01 09:54) [3]


> Сергей М. ©   (01.09.08 08:15) [2]

Так и думал. Жаль, что проще способа нет :(


 
Сергей М. ©   (2008-09-01 10:04) [4]


> Жаль, что проще способа нет


Откуда ж ему взяться при позднем связывании ?


 
Dmitry S ©   (2008-09-01 10:06) [5]


> Откуда ж ему взяться при позднем связывании ?

А что тогда код выполняет, если сделать:
Obj.SomeMethod(); ?
Насколько я знаю это и есть неявный GetIdsOfNames и Invoke. Только имя метода записано статично.


 
oxffff ©   (2008-09-01 10:11) [6]


> Dmitry S ©   (01.09.08 10:06) [5]


За тебя это делает компилятор.
Посмотри реализацию и используй DispatchInvoke из comobj

procedure DispatchInvoke(const Dispatch: IDispatch; CallDesc: PCallDesc;
 DispIDs: PDispIDList; Params: Pointer; Result: PVariant);



Страницы: 1 вся ветка

Текущий архив: 2008.10.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
15-1220458307
@!!ex
2008-09-03 20:11
2008.10.26
Началось...


15-1220467529
Кое кто
2008-09-03 22:45
2008.10.26
Фуникулёр с гидравлическим противовесом


15-1220357934
Урсулапов
2008-09-02 16:18
2008.10.26
Вирус на index.php :((


2-1221653340
Lamer6666
2008-09-17 16:09
2008.10.26
Помогите с установкой zeosDBO


15-1219930822
XentaAbsenta
2008-08-28 17:40
2008.10.26
Чем вам лично не нравится CPP?