Вот пример который показывает как не изменяя имя вызываемой процедуры, по факту вызывать разные процедуры, а не одну и ту же.
Код: Prototype MyProc()
Dim ProcArray(4)
Procedure Proc1() MessageRequester("","процедура 1", 16) EndProcedure
Procedure Proc2() MessageRequester("","процедура 2", 32) EndProcedure
Procedure Proc3() MessageRequester("","процедура 3", 48) EndProcedure
Procedure Proc4() MessageRequester("","процедура 4", 64) EndProcedure
ProcArray(1)=@Proc1() ProcArray(2)=@Proc2() ProcArray(3)=@Proc3() ProcArray(4)=@Proc4()
For i=1 To 4 MyProc.MyProc = ProcArray(i) MyProc() Next i Рассмотрим как он работает. В начале программы создается прототип функции с именем MyProc. Далее создается массив типа Integer состоящий из пяти (0...4) элементов. Ниже по тексту, находятся 4 процедуры с именами Proc1, Proc2, Proc3 и Proc4. В массив ProcArray помещаются указатели (начальные адреса в памяти) на эти 4 процедуры. Далее в цикле, сначала устанавливается начальный адрес прототипа процедуры MyProc, который берется из массива ProcArray, а затем, вызывается процедура MyProc, но поскольку при каждой итерации цикла, ее адрес меняется, то вызываться будут разные процедуры, не смотря на то, что судя по коду, вызывается одна и та же процедура.
|