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

Вниз

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

 
Mdsns   (2003-08-13 06:14) [0]

Как вызвать процедуру или функцию зная ее имя, через строковую переменную??..


 
Vulko ©   (2003-08-13 06:34) [1]

...

public
procedure proc;

...

procedure tform1.buttonclick(sender: tobject);
begin
...
proc;
...
end;
...


 
Palladin ©   (2003-08-13 07:14) [2]

никак


 
k-man ©   (2003-08-13 07:52) [3]

> Vulko © (13.08.03 06:34)

Ты хоть сам понял чего ты написал?


 
Fktrc ©   (2003-08-13 08:08) [4]

И чего ругаетесь. Вероятно, человек имел в виду следующее - в строковой переменной лежит имя процедуры (причем сформированное в runtime - иначе не стоило и спрашивать). Как вызвать эту процедуру? Кстати, ответ интересен и мне. Я читал, что "используя механизм RTTI, такое можно сделать" (с какого-то форума), но как?


 
Palladin ©   (2003-08-13 08:21) [5]

никак


 
Zacho ©   (2003-08-13 08:32) [6]

А может автора исходного поста устроят переменные процедурного типа ?


 
wl ©   (2003-08-13 08:50) [7]

Можно попробовать занести в StringList имена всех процедур в свойство Strings и адреса этих процедур в свойство Objects. Тогда для вызова нужной процедуры выполняется поиск по имени с последующим вызовом по адресу из свойства Objects.

Надеюсь понятно объяснил...


 
Skier ©   (2003-08-13 08:53) [8]

GetProcAddress(...) ?


 
Толик ©   (2003-08-13 10:57) [9]

только для published: TObject.MethodAddress - в качестве параметра принимает строковое имя процедуры и возвращает указатель на неё. Через этот указатель и вызывать.


 
HolACost!   (2003-08-13 11:04) [10]

Я больше склоняюсь к исползованию птаблицы соответстий строковой переменной и адреса вызываемой функции!


 
Юрий Федоров ©   (2003-08-13 11:25) [11]

или как Skier © (13.08.03 08:53)
Только тогда их все экспортировать надо


 
Толик ©   (2003-08-13 11:29) [12]

Короче, все выше приведённые методы сводятся к HolACost! (13.08.03 11:04) [10] Другой вопрос, реализовано ли это кем-то или надо писать самому.


 
Skier ©   (2003-08-13 11:37) [13]

>Толик © (13.08.03 11:29) [12]
для [10] ещё нужно будет описание параметров добавлять... и дальше со всеми остановками.
Конечная остановка - интерпретатор. :)


 
HolACost!   (2003-08-13 11:54) [14]

Кстати не обязятельно все параметры! Можно только один посылать - адрес некой структуры типа Просто Pointer! А каждая процедура будет сама приводить этот адрес к нужному ей типу. и соответственно вызывающая процедура будет передавать адрес...


 
HolACost!   (2003-08-13 11:56) [15]

Кстати - это реализовано, но не на дельфи - принцип реализации просто - для простоты - можно простой пребор всех значений... для скорости - иметь отсортированную таблицу по строковым меткам и работать логорифмическим поиском! Короче делаем как делает это наша великая Windows 3.1


 
Song ©   (2003-08-13 12:03) [16]

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;


 
Skier ©   (2003-08-13 12:10) [17]

>Song © (13.08.03 12:03) [16]
Проблема в том что параметры могут быть разными.


 
wl ©   (2003-08-13 13:42) [18]

>Skier © (13.08.03 12:10) [17]

Использовать тип Variant :)


 
HolACost!   (2003-08-13 14:48) [19]

Я за свой вариант! Такая весч - ну типа подобная - реализована в одной оске!



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

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

Наверх




Память: 0.51 MB
Время: 0.048 c
1-81641
Алексей Петухов
2003-08-12 13:46
2003.08.25
try except


14-81920
Best Gun
2003-08-06 19:27
2003.08.25
Анонимный прокси


9-81520
Barlok
2003-02-21 19:31
2003.08.25
Народ помогите, по OpenGL не работает DGLUT.PAS, пожайлуста.


1-81621
Злодей
2003-08-13 00:30
2003.08.25
Show Desktop


1-81807
AlexTregubov
2003-08-15 11:36
2003.08.25
Окно со списком файлов и директорий