• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Вопрос по Delphi

  • Автор темы dima00
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D

dima00

Скажите, пожалуйста, можно ли в Delphi как нибудь вызывать процедуру или функцию через переменную типа string, содержащую имя процедуры (ф-ции). Например вызвать свою процедуру procedure1 с помощью переменной s='procedure1', но не используя if s=... then procedure1, а каким нибудь оператором. Т.е. чтобы процедуры вызывались пользователем например через edit
 
Z

zubr

В C++ легко через макрос, а в Delphi врядли.
 
B

Barmutik

В некоторой мере Вам поможет MethodAddress, но если Вам нужно полномасштабное решение то испоьлзуйте скриптовые языки...
 
C

chingiz

Действительно в Delphi это вряд ли возможно.
Но я не пойму чем вам не нравится конструкция
if Edit.Text=... then Procedure1 и т. д.
или же case...
 
B

BVS

Для: dima00
Вместо Edit`а попробуй использовать TComboBox, в property Items: TStrings занесешь все свои процедуры которые должны вызываться (ComboBox1.Items.AddObject('procedure1', TObject(procedure1()))
Таким образом у тебя будет возможность иметь и название и адрес твоих процедур.

Другой способ: хранить процедуры в dll библиотеке, и использовать API функции по позднему связыванию.
Код:
HINSTANCE LoadLibrary(

LPCTSTR lpLibFileName 	// address of filename of executable module 
);
FARPROC GetProcAddress(

HMODULE hModule,	// handle to DLL module 
LPCSTR lpProcName 	// name of function 
);

PS: Сейчас у меня delphi не стоит поэтому код не проверял, если будет выдавать ошибку попробуй заменить TObject(procedure1()) на TObject(@procedure1()) или еще как нибуть приведи procedure1() к типу TObject.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!