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

Вниз

в переменной записано название процедуры   Найти похожие ветки 

 
avet   (2003-03-12 15:13) [0]

не подскажете,как в Delphi(если там вообще существует такая возможность) вызвать процедуру, имя которой записано в переменной? такая проблема встречается уже не первый раз!


 
y-soft ©   (2003-03-12 15:20) [1]

Макроподстановки возможны в интерпретаторах,
а в Delphi возможно запистать в переменную процедурного типа адрес процедуры. Хотя обходные пути есть, например, хранить в StringList одновременно имя процедуры и ссылку на нее


 
PVOzerski ©   (2003-03-12 15:26) [2]

Указать все процедуры, которые надо вызывать, в секции exports (как в dll), потом вызывать через GetProcAddress. У меня такое работало. Но как с параметрами разбираться - решать Вам.


 
y-soft ©   (2003-03-12 15:30) [3]

>PVOzerski © (12.03.03 15:26)
В общем-то это такой же подход. Можно даже совместить - заполнять TStringList.Objects результатами GetProcAddress


 
Polevi ©   (2003-03-12 15:42) [4]

или IDispatch.Invoke


 
Serginio   (2003-03-12 15:50) [5]

TObject.FindMethod


 
stone ©   (2003-03-12 16:02) [6]

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

type
TMacroProc = procedure(param: integer); // процедурный тип соответствующей вашей процедуре
TMacroName = string[32];
TMacroLink = record
name: TMacroName;
proc: TMacroProc;
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;



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

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

Наверх




Память: 0.48 MB
Время: 0.019 c
14-76668
Новичек
2003-03-09 11:24
2003.03.24
Новости VCL


3-76369
galexis
2003-03-04 19:13
2003.03.24
загрузка из файла xml


8-76520
SPIRIT
2002-12-12 13:50
2003.03.24
Прочитать TAG в MP3


7-76693
Связной
2003-01-30 16:19
2003.03.24
Как очистить оперативную память?


14-76587
_MAD_
2003-03-06 15:17
2003.03.24
Outlook menu