Следующая статья: Массивы размером более 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;