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

Вниз

Вызов функции по имени в run-time   Найти похожие ветки 

 
d_oleg ©   (2007-05-28 17:36) [0]

Возникла необходимость вызвать метод объекта по имени да к тому же передать параметры. При этом на момент компиляции неизвестен сам формат метода, то есть нельзя написать банально:

type
 TMyMethod = procedure(AParam: Integer) of Object;

и потом это тип использовать. Нашел в недрах OleCtrls процедурину CallEventMethod - в-принципе, то что надо, метод вызывается, но вот с параметрами - беда. Никто не сталкивался с подобной задачей?


 
MBo ©   (2007-05-28 17:45) [1]

цель какая?


 
d_oleg ©   (2007-05-28 17:59) [2]


> цель какая?

Цель - вызывать функцию по имени, передать ей параметры.


 
MBo ©   (2007-05-28 18:05) [3]

Для обычной функции - DLL можно использовать
Для методов объектов - сделать их Published и использовать RTTI


 
Loginov Dmitry ©   (2007-05-28 18:28) [4]

> Для обычной функции - DLL можно использовать


Вместо использования DLL можно записать адреса всех статических процедур в списке TList.


 
Leonid Troyanovsky ©   (2007-05-28 18:50) [5]


> MBo ©   (28.05.07 18:05) [3]

> Для обычной функции - DLL можно использовать

Можно и сам exe.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2007-05-28 18:58) [6]


> d_oleg ©   (28.05.07 17:59) [2]

> Цель - вызывать функцию по имени, передать ей параметры.

http://rsdn.ru/Forum/Message.aspx?mid=476748&only=1

--
Regards, LVT.


 
d_oleg ©   (2007-05-28 23:36) [7]


> Для методов объектов - сделать их Published и использовать
> RTTI
да, в этом направлении и смотрю, но в RTTI - работа со свойствами, не с методами. Адрес метода-то я получу, а вот как выполнить его с параметрами?

Leonid Troyanovsky нет, не то. Я же говорю (в самом первом посте), что не известно заранее формат вызова метода, поэтому такое не подходит
var
CommandProc: function: Integer of object;


 
d_oleg ©   (2007-05-28 23:43) [8]

Поробую пояснить немного общую задачу: COM-приложение клиент/сервер, бизнес-логика находится на сервере, описание форм находится на сервере, клиент лишь получает текстовое описание формы, строит ее и отображает/изменяет данные посредством data snap. Соответственно, требуется для простейших операций на стороне клиента иметь возможность вызова некоторых методов объектов формы. Некоторые методы можно, конечно, заменить работой со свойствами через RTTI (и так все пока и работает), но все же вызов метода необходим...
"Чистый" (без параметров) вызов метода сейчас реализован по аналогии с CallEventMethod из OleCtrls.


 
Плохиш ©   (2007-05-28 23:59) [9]


> d_oleg ©   (28.05.07 23:43) [8]
> Поробую пояснить немного общую задачу: COM-приложение

Может стоит для начала теорию изучить, вместо изобретения велосипеда с квадратными колёсами. Начать можно с этой книги http:// www.books.ru/shop/search?search_type=+&query=5-94157-142-9


 
d_oleg ©   (2007-05-29 08:52) [10]

> Плохиш, теория вполне изучена, спасибо.


 
Сергей М. ©   (2007-05-29 09:08) [11]


> d_oleg


см. все о диспинтерфейсах (IDispatch)


 
VPBar   (2007-05-29 09:48) [12]

Мне в свое время на такой вопрос ответили "Интерпритатор пишешь?".
Если метод нужно описать и вызвать в рантайме, то см.
DelphiWebScript http://www.dwscript.com
Innerfuse Pascal Script III (IFPS3) http://www.carlo-kok.com/
Можно воспользоваться MSScriptControl
Все эти способы позволяют вызвать функции из длл и Dispatch методы с произвольными параметрами описываемыми в рантайме.
Чтобы вызывать published методы любого класса надо завернуть его в прокси. Типа такого TVCLProxy и TVCLScriptControl, поищи в инете по этим словам.


 
d_oleg ©   (2007-05-31 11:29) [13]

ObjAuto.pas, функции GetMethodInfo и ObjectInvoke отлично решают проблему.



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

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

Наверх




Память: 0.49 MB
Время: 0.024 c
15-1183650299
Cyrax
2007-07-05 19:44
2007.08.05
Термин "квалификационный ранг" по английски...


6-1167194866
merko$
2006-12-27 07:47
2007.08.05
Как прочитать файл.txt на удаленном ПК


2-1183798091
Maxoglot
2007-07-07 12:48
2007.08.05
Сортировка вещественных чисел


15-1184087467
AIK
2007-07-10 21:11
2007.08.05
Вопрос


2-1184001195
Yurij-7
2007-07-09 21:13
2007.08.05
почему не работает запрос вида в FB ?