Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Вниз

Вызов функции по имени в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
15-1183970292
dr Gonzo
2007-07-09 12:38
2007.08.05
Качество Freelance


1-1180359392
d_oleg
2007-05-28 17:36
2007.08.05
Вызов функции по имени в run-time


15-1183624547
Magedon
2007-07-05 12:35
2007.08.05
Виста с её системой безопастности.


15-1183727012
Unknown user
2007-07-06 17:03
2007.08.05
DWG


15-1184208227
Slider007
2007-07-12 06:43
2007.08.05
С днем рождения ! 12 июля 2007 четверг





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский