Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вызов функции во время выполнения


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]

Откуда ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо