Форум: "Прочее";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизКак выполнить любой метод? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c