Главная страница
    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.01 c
3-1144146989
Вано
2006-04-04 14:36
2006.05.28
Проблема коннекта!!!


2-1147531542
AlexanderMS
2006-05-13 18:45
2006.05.28
Проблема. Программа "не успевает" вывести Hint в StatusBar.


6-1138425550
Spose
2006-01-28 08:19
2006.05.28
Скачать файл с интернета


1-1145612267
petun[-]
2006-04-21 13:37
2006.05.28
группируем несколько процедур в одну


2-1147032712
Юнкер
2006-05-08 00:11
2006.05.28
record и MemoryStream





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский