Главная страница
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.027 c
15-1146326262
Adil
2006-04-29 19:57
2006.05.28
Драйвера для ВебКвмеры


15-1146304466
БГ
2006-04-29 13:54
2006.05.28
Что за вид спорта?


1-1145453390
Uriy
2006-04-19 17:29
2006.05.28
Transporent на канве


2-1146807950
it_work
2006-05-05 09:45
2006.05.28
Как через TIdPOP3 пометить письмо как прочитанное на сервере?


2-1147154902
Sergey Masloff
2006-05-09 10:08
2006.05.28
Проблема с кодировками. Написал плагин к Outlook но сабж...