Главная страница
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.5 MB
Время: 0.017 c
15-1183614347
Qzzma
2007-07-05 09:45
2007.08.05
Книги по Delphi Pascal для "девушек"


3-1177410342
Леван Варшанидзе
2007-04-24 14:25
2007.08.05
BDE для Windows XP и Windows98


2-1183727842
koha
2007-07-06 17:17
2007.08.05
Можно ли создать событие для не визуального класса?


6-1166809548
XfroSt
2006-12-22 20:45
2007.08.05
IndyUDPServer и несколько интерфейсов


15-1184069229
Вася Правильный
2007-07-10 16:07
2007.08.05
и мыло несуществующее у того варвара :(