Форум: "Основная";
Текущий архив: 2003.03.24;
Скачать: [xml.tar.bz2];
Внизв переменной записано название процедуры Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.008 c