Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> в переменной записано имя процедуры 
:(
    Опции темы
avet
  Дата 12.3.2003, 23:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











не подскажете,как в Delphi(если там вообще существует такая возможность) вызвать процедуру, имя которой записано в переменной? такая проблема встречается уже не первый раз!
  Вверх
acp
Дата 13.3.2003, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

Репутация: нет
Всего: 2



Если функция вызываемая находится в DLL, то можно (GetProcAddress). Для случая если в самой программе, не знаю sad.gif
PM WWW ICQ   Вверх
Fantasist
Дата 13.3.2003, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
вызвать процедуру, имя которой записано в переменной


Это извращение возникает из-за тесного общения с скриптовыми (интерпритируемыми) языками. На самом деле это практически никогда не нужно. Тем не менее способы есть. Если это методы объекта, тогда можно воспользоваться RTTI (у нас, вроде, в FAQ это есть), однако если это обыкновенные функции, то можно, как и предложил acp, объявить их в секции экспорта а потом воспользоваться GetProcAddress.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
MovAx
Дата 15.3.2003, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.3.2003
Где: Москва

Репутация: нет
Всего: нет



Вроде как avet ничего про Dll не говорил, тогда отвечаю примером

type
TMyProc = procedure ( Param:integer );
...
procedure MyProc(Param:integer);
begin
...
end;
...

var MyProcVar:TMyProc;
i:integer;
begin
MyProcVar:=MyProc;
MyProcVar(i);
end.



PM MAIL   Вверх
acp
Дата 15.3.2003, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

Репутация: нет
Всего: 2



Пример некорректен. Т.к. это не совсем то, точнее совсем не то tounge.gif
PM WWW ICQ   Вверх
Fantasist
Дата 15.3.2003, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: нет
Всего: 41



Цитата
то можно, как и предложил acp, объявить их в секции экспорта а потом воспользоваться GetProcAddress.


Это можно сделать и в exe, а не только в dll.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
MovAx
Дата 15.3.2003, 02:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.3.2003
Где: Москва

Репутация: нет
Всего: нет



Цитата(acp @ 14.3.2003, 16:45)
Пример некорректен. Т.к. это не совсем то, точнее совсем не то tounge.gif

Цитата
Пример некорректен. Т.к. это не совсем то, точнее совсем не то tounge.gif 


Ты так уверен, как будто сам топик создавал. smile.gif
PM MAIL   Вверх
acp
Дата 15.3.2003, 02:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

Репутация: нет
Всего: 2



В первой мессаге топика условие задачи определено достаточно конкретно. Т.е. указано, что в переменной хранится именно имя - т.е. строковая переменнная и т.п., но никак не указатель или что-то ещё.
PM WWW ICQ   Вверх
Vit
Дата 15.3.2003, 02:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



У нас в FAQ есть пример как это делается


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
MovAx
Дата 15.3.2003, 04:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 14.3.2003
Где: Москва

Репутация: нет
Всего: нет



А помоему это все чушь и мой топик (не этот) smile.gif в том числе, такое возможно только в интерпретаторах. В FOXPRO я так делал.
PM MAIL   Вверх
Vit
Дата 15.3.2003, 04:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Внесём ясность - если открыть exe файл любым просмотрщиком и поискать просто название процедуры - её не будет, следовательно в exe названия процедуры нат и её найти нельзя. А вот если это будет Procedure of Object, т.е. метод класса 0 - то очень даже можно - см. FAQ


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.