Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как бы запустить функцию, название которой хранится в строке?


Страницы:   1 2

karat_1 ©   (2011-10-13 10:20:00) 

Не могу сходу решить. Может существует какое решение?

Предположим в строке хранится название функции. Как бы ее запустить?

Знаете еще в VB Access есть функция Call <функция>


DiamondShark   (2011-10-21 15:53:00) [1]


> Dimka Maslov ©   (13.10.11 19:56) [23]
> > oxffff ©   (13.10.11 16:48) [20]Такое возможно только
> для публишед-методов. И про это было написано в справке.
>  Сейчас почему-то уже не написано...

Видимо, потому что сейчас есть расширенная RTTI.


DiamondShark   (2011-10-21 15:27:00) [2]


> В <поле таблице>, через маркер, ну например @, прописывать
> название функции, которой нужно обработать значение.

А реализовать эту функцию на сервере не получается? В SQL нет проблем с вызовом функции по имени, вообще никаких.


karat_1   (2011-10-14 10:36:00) [3]

А что то вы тут междусобойчик устроили? =))
Ну хоть ссылкой поделились. Спасибо.


Dimka Maslov   (2011-10-13 19:56:00) [4]


> oxffff ©   (13.10.11 16:48) [20]


Такое возможно только для публишед-методов. И про это было написано в справке. Сейчас почему-то уже не написано...


b z   (2011-10-13 18:39:00) [5]

Еще проще, reflection, или нет?


Сергей М.   (2011-10-13 16:50:00) [6]


> Самый простой


А еще, пожалуй, проще - TObjectDispatch


oxffff   (2011-10-13 16:48:00) [7]

Есть несколько вариантов решения этой задачи.

Самый простой
http://docwiki.embarcadero.com/VCL/en/System.TObject.MethodAddress


han_malign   (2011-10-13 15:46:00) [8]


> Знаете еще в VB Access есть функция Call <функция>

- ну дык, в VBS(JS,CS) - "функция" это IDispatch(Ex) поддерживающий метод "call"...


Inovet   (2011-10-13 15:41:00) [9]

> [15] karat_1 ©   (13.10.11 12:26)
> > Ну теперь жди проблем с ДЛЛ
>
> ну обложился всякими If-ами. Посмотрим

А как они помогут?


Сергей М.   (2011-10-13 15:24:00) [10]


> теперь эту DLL, могу и к IB прикрутить


В качестве IB UDF-либы что ли ?


OW   (2011-10-13 12:41:00) [11]


> karat_1 ©


> ну например @, прописывать название функции, которой нужно
> обработать значение.


я б вынес в процедуру, как только @ встречается.
а в процедуре уже тупыми if анализировал.
зато любой поймет и поправит, если что. (и сам через пол-года поймешь тоже за 5 сек :) )


karat_1   (2011-10-13 12:26:00) [12]


> Ну теперь жди проблем с ДЛЛ

ну обложился всякими If-ами. Посмотрим


karat_1   (2011-10-13 12:25:00) [13]


> Исполняемый файл тоже имеет таблицу экспорта и тоже как
> и длл может спокойно экспортировать функции/процедуры...
>

по идеии, я теперь эту DLL, могу и к IB прикрутить.
Интересно, сильно нагрузится или нет


karat_1   (2011-10-13 12:22:00) [14]


> это все хорошо,
> а как быть с параметрами?

у меня все параметры в кол-во 1шт и все строковые. Мне повезло в этом плане.

А делаю я задачку. Хочу максимум глобализовать свое решение, чтобы потом код минимум подгонять и менять и шахматить настройками уже на стороне клиента.

делаю выгрузку данных в шаблон Word. Путем замены текста в шаблоне так называемых "меток", ну например $Name$, на значение поля в выгружаемой таблице.
чтобы адаптировать все это дело под кучу шаблонов и чтобы не дописывать код под новый, я придумал таблицу:
<код шаблона>,<поле в шаблоне>,<поле в таблице>
3, $Name$, FULL_NAME

все отлично работает, но вот незадача, есть всякие тонкости. Например Сумма прописью, Родительный падеж имени, Сокращенное ФИО и тд. Сервер Interbase конечно можно нагрузить различными ХП, что наверное не есть хорошо.
Поэтому пришлось доработать решение, такой вот задачей. В <поле таблице>, через маркер, ну например @, прописывать название функции, которой нужно обработать значение.
Такие вот пироги.


QAZ   (2011-10-13 12:18:00) [15]

а > QAZ   (13.10.11 11:34) [7] все равно круче ;)


Rouse_   (2011-10-13 12:07:00) [16]


> Сделал через длл.

Исполняемый файл тоже имеет таблицу экспорта и тоже как и длл может спокойно экспортировать функции/процедуры...


OW   (2011-10-13 12:02:00) [17]

один пень, нужна таблица соответсвия
Имя - ЧтоВызывать
Хоть в таблице экспорта, GetProcAddress() и запуск.
Хоть стринглист, где в Object будет помещаться адрес функции.
Хоть if s='SuperFunction' then SuperFunction;

А если все объявить через overload и вызывать по размеру аргумента
т.е.
 procedure pr(A:Byte); overload;
 procedure pr(A:Word); overload;
 procedure pr(A:DWord); overload;
проседуру еще RunIt(A : array of byte)? которая массив будет загонять в соотв. переменную и вызывать pr(переменная_эта)
Думаю можно придумать как именно, теоретически вроде должно получится..

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

поэтому "честный" вызов думается неизбежен для светлого будущего.


Anatoly Podgoretsky   (2011-10-13 11:58:00) [18]

> karat_1  (13.10.2011 11:40:08)  [8]

Ну теперь жди проблем с ДЛЛ


karat_1   (2011-10-13 11:40:00) [19]

sniknik спасибо за полунаводку
Rouse_ спасибо за наводку

Сделал через длл. А то яндекс при запросе "экспорт функций" наводит все на длл.


QAZ   (2011-10-13 11:34:00) [20]


if s='SuperFunction' then SuperFunction;

:D


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо