Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
2-1147168826
Der Nechk@ssoff
2006-05-09 14:00
2006.05.28
VtChart


2-1147592071
kilonet
2006-05-14 11:34
2006.05.28
функция TextOut


2-1147602331
ДЯМАК
2006-05-14 14:25
2006.05.28
!!!!!!!МАССССИВЫ!!!!!


15-1146634114
fast2
2006-05-03 09:28
2006.05.28
Как избавится от постоянно всплывающих окон?


2-1147420555
Ling
2006-05-12 11:55
2006.05.28
в чём разница?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский