Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: -0.957 c
15-1145961309
Manic Mechanic
2006-04-25 14:35
2006.05.28
Сходил таки на керлинг, как приглашали


15-1146300488
Petr V. Abramov
2006-04-29 12:48
2006.05.28
Ну наконец-то :)


15-1146656687
Иван Шихалев
2006-05-03 15:44
2006.05.28
Есть практикующие электронщики?


2-1147603543
EZHIK
2006-05-14 14:45
2006.05.28
Команда goto или что-то наподобие...


15-1146423589
Yanis
2006-04-30 22:59
2006.05.28
Какие могут быть траблы?




   Наверх