Главная страница
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.015 c
3-51059
Алекси
2003-09-26 18:33
2003.10.16
перевод цифр в их словарные значения


8-51357
Bot_a_nik
2003-06-12 00:52
2003.10.16
Глюки в Direct3D


14-51408
Кучма
2003-09-26 16:52
2003.10.16
Украина для украинцев!!!


14-51468
саша2
2003-09-29 13:35
2003.10.16
Что происходит?


3-51068
GS
2003-09-24 06:33
2003.10.16
Подскажите что можно использовать в качестве базы данных