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

Вниз

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

 
zumo ©   (2003-10-04 11:32) [0]

Как вызвать функцию если её имя записано в строковой переменной ?


 
Palladin ©   (2003-10-04 13:15) [1]

никак


 
Anatoly Podgoretsky ©   (2003-10-04 13:17) [2]

Ну почему никак, надо просто сделать соответствие между именем и функцией, например массивы, списки.


 
Palladin ©   (2003-10-04 13:30) [3]

Свести все к простейшему парсеру и интерпритатору...
Согласен, можно. Вот только по мимо имени в строковой переменной понадобятся и параметры в строковой переменной, а так же регистрация каждой нужной функции или процедуры в массивах соответствия... а надоли оно...

> zumo © (04.10.03 11:32)

подобия eval в pascale нет


 
Anatoly Podgoretsky ©   (2003-10-04 13:57) [4]

А как же, конечно все потребуется. Может и не надо, а справится ли?


 
Song ©   (2003-10-04 14:01) [5]

Если все процедуры, которые вы собираетесь вызывать, имеют список с одними и теми же параметрами (или все без параметров), то это не трудно.
Для этого необходимы: процедурный тип, соответствующий вашей процедуре, например:

type
TMacroProc = procedure(param: Integer);

//массив, сопоставляющий имена процедур их адресам во время выполнения приложения:

TMacroName = string[32];
TMacroLink = record
name: TMacroName;
proc: TMacroProc;
end;

TMacroList = array [1..MaxMacroIndex] of TMacroLink;

const
Macros: TMacroList = (
(name: "Proc1"; proc: Proc1),
(name: "Proc2"; proc: Proc2),
...
); //интерпретатор функций, типа:

procedure CallMacro(name: String; param: Integer);
var
i: Integer;
begin
for i := 1 to MaxMacroIndex do
if CompareText(name, Macros[i].name) = 0 then
begin
Macros[i].proc(param);
break;
end;
end;

{Макропроцедуры необходимо объявить в секции Interface модуля или с ключевым словом Far, например: }
procedure Proc1(n: Integer); far;
begin
...
end;

procedure Proc2(n: Integer); far;
begin
...
end;


 
willys ©   (2003-10-04 16:38) [6]

если функция - это метод класса, то можно.


 
Anatoly Podgoretsky ©   (2003-10-04 21:27) [7]

willys © (04.10.03 16:38) [6]
Метод класса это не функция, а метод



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

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

Наверх




Память: 0.48 MB
Время: 0.023 c
1-51292
drakulita
2003-10-06 11:23
2003.10.16
Help?


1-51343
dim0K
2003-10-05 20:03
2003.10.16
Удаления и поиск ключа в реесте.


6-51381
Boutenko_Ivan
2003-08-19 18:25
2003.10.16
вопрос, работа с почтой


3-51081
KMI
2003-09-26 18:44
2003.10.16
EMS IB Manager Prof 3.5.0.3 - Cracked


14-51405
LOX
2003-09-24 20:23
2003.10.16
Видал сайт ЭФункции и процедуры в DELPHI