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

Вниз

Вызов функции во время выполнения   Найти похожие ветки 

 
solenko ©   (2006-04-19 15:01) [0]

Здравствуйте!
На этапе выполнения имеем строку, содержащую имя функции. Каким образом можно эту функция вызвать?


 
balepa ©   (2006-04-19 15:04) [1]

Откуда ?


 
solenko ©   (2006-04-19 15:05) [2]

тот же модуль в котором она описана, просто на этапе разработки неизвестно какую именно функцию вызывать.


 
balepa ©   (2006-04-19 15:06) [3]

Где то тут это было


 
solenko ©   (2006-04-19 15:09) [4]

Поиском прошелся по всему сайту -- к сожалению ничего не нашел


 
balepa ©   (2006-04-19 15:11) [5]

Рабочий день закончился. Домой приду посмотрю, но наверно к этому времени кто нибудь уже ответит.


 
Layner ©   (2006-04-19 15:40) [6]

if str="myf1" then begin "exec myf1" emd;
if str="myf2" then begin "exec myf2" emd;
if str="myf3" then begin "exec myf3" emd;

?


 
solenko ©   (2006-04-19 15:45) [7]

Так сейчас и сделано, но вот только количество этих самых if уже начинает напрягать, а программа еще будет расширяться...
Имеется в виду нечто схожее с динамической загрузкой dll.


 
MBo ©   (2006-04-19 15:50) [8]

1. GetProcAddress с DLL
2. published метод + MethodAddress
3. Массив (или другая структура) пар название-функция(адрес)


 
solenko ©   (2006-04-19 17:19) [9]

А вариант
2. published метод + MethodAddress
будет работать только для published?
Даже если вызывается из того-же класса, в котором описан искомый метод?

+Дополнительный вопрос... Каким образом вызвать метод имея его адрес?


 
MBo ©   (2006-04-19 17:35) [10]

>будет работать только для published?
Конечно.

>Каким образом вызвать метод имея его адрес?
С использованием TMethod. Code - полученный указатель, а Data - конкретный объект.


 
TUser ©   (2006-04-20 10:23) [11]

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.


 
TUser ©   (2006-04-20 10:30) [12]

SysUtils - лишний



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

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

Наверх




Память: 0.49 MB
Время: 0.045 c
15-1146332510
Festor:)
2006-04-29 21:41
2006.05.28
Разгон Amd Athlon 64 3000+


4-1141757546
Кашперук Иван
2006-03-07 21:52
2006.05.28
Описание расширения файла


15-1146112390
Карелин Артем
2006-04-27 08:33
2006.05.28
Нужны программисты в Самаре на полный день.


3-1144404814
Russ
2006-04-07 14:13
2006.05.28
запрос для выбора данных из двух БД


6-1138449753
WebSQLNeeder
2006-01-28 15:02
2006.05.28
Вырезать html теги из произвольной строки типа string