Форум: "Основная";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизВызов функции во время выполнения Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c