Телефон: +7 (926) 245-03-63

Переменная в качестве имени процедуры

Следующая статья: Массивы размером более 64К.

Каким образом можно использовать переменную типа String в качестве имени процедуры?
Если все процедуры, которые вы собираетесь вызывать, имеют список с одними и теми же параметрами (или все без параметров), то это не трудно. Для этого необходимы: процедурный тип, соответствующий вашей процедуре, например: type TMacroProc=procedure(param: Integer); массив, сопоставляющий имена процедур их адресам во время выполнения приложения:

type
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;
Интересное в интернете: стройматериалы, Светлый