![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов функции во время выполнения
solenko © (2006-04-19 15:01:00)Здравствуйте!
На этапе выполнения имеем строку, содержащую имя функции. Каким образом можно эту функция вызвать?
TUser (2006-04-20 10:30:00) [1]SysUtils - лишний
TUser (2006-04-20 10:23:00) [2]
program Call;
{$apptype console}
uses Windows, SysUtils;
procedure Call1;
begin
writeln ('Call 1');
end;
procedure Call2;
begin
writeln ('Call 2');
end;
exports
Call1, Call2;
type
TCall = procedure;
var h: THandle;
p: TCall;
s: string;
begin
h:=hInstance;
repeat
readln (s);
@p := GetProcAddress (h,PAnsiChar(s));
if @p = nil then break;
p;
until false;
end.
MBo (2006-04-19 17:35:00) [3]>будет работать только для published?
Конечно.
>Каким образом вызвать метод имея его адрес?
С использованием TMethod. Code - полученный указатель, а Data - конкретный объект.
solenko (2006-04-19 17:19:00) [4]А вариант
2. published метод + MethodAddress
будет работать только для published?
Даже если вызывается из того-же класса, в котором описан искомый метод?
+Дополнительный вопрос... Каким образом вызвать метод имея его адрес?
MBo (2006-04-19 15:50:00) [5]1. GetProcAddress с DLL
2. published метод + MethodAddress
3. Массив (или другая структура) пар название-функция(адрес)
solenko (2006-04-19 15:45:00) [6]Так сейчас и сделано, но вот только количество этих самых if уже начинает напрягать, а программа еще будет расширяться...
Имеется в виду нечто схожее с динамической загрузкой dll.
Layner (2006-04-19 15:40:00) [7]
if str='myf1' then begin "exec myf1" emd;
if str='myf2' then begin "exec myf2" emd;
if str='myf3' then begin "exec myf3" emd;
?
balepa (2006-04-19 15:11:00) [8]Рабочий день закончился. Домой приду посмотрю, но наверно к этому времени кто нибудь уже ответит.
solenko (2006-04-19 15:09:00) [9]Поиском прошелся по всему сайту -- к сожалению ничего не нашел
balepa (2006-04-19 15:06:00) [10]Где то тут это было
solenko (2006-04-19 15:05:00) [11]тот же модуль в котором она описана, просто на этапе разработки неизвестно какую именно функцию вызывать.
balepa (2006-04-19 15:04:00) [12]Откуда ?