Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Вниз

Как выполнить процедуру, имя которой содержится в переменной?   Найти похожие ветки 

 
skirdov   (2002-11-20 17:02) [0]

В Visual FoxPro имеется понятие макроподстановки (&), т.е. допустим есть код:
a = "ProcName (<param1>, <param2>, ...)"
&a
в результате которого выполнится процедура ProcName с параметрами <param1>, <param2>, ...
А есть что-нибудь наподобие в Delphi?


 
Skier   (2002-11-20 17:05) [1]

>skirdov
type
TMyProcedure = procedure(const AFirstParam, ASecondParam :
TParamType);


 
MBo   (2002-11-20 17:05) [2]

именно такого нет.
есть процедурные переменные, но это не аналог


 
Anatoly Podgoretsky   (2002-11-20 17:06) [3]

Нет - это особенность интерпритаторов, то ты иожешь легко это эмулировать массивами или списками или напимать свой интерпритатор


 
Digitman   (2002-11-20 17:13) [4]

Делфи здесь ни при чем. Это - визуальная среда программирования, базирующаяся на Pascal"е. И не более того.
Если же вопрос - о Pascal (или Object Pascal) как о ЯЗЫКЕ программирования, имеющем аналогичные возможности, то ответ - нет. Fox - интерпретатор, Pascal - компилятор. Этим все сказано.

Вместе с этим вполне возможно, что решение "проблемы" лежит "на поверхности" (и вообще проблемы как таковой нет). Нужно всего лишь более конкретно определиться с постановкой задачи.


 
skirdov   (2002-11-20 17:15) [5]

Спасибо за ответы :)


 
Юрий Зотов   (2002-11-20 19:03) [6]

Все это так, но есть возможность вызвать published-метод объекта по его строковому имени. См. MethodAddress и TMethod.


 
reonid   (2002-11-20 19:29) [7]

В своё время я экспериментировал с такой вещью:

Ограниченное множество зарегистрированных процедур
(могут иметь разные списки параметров), последовательность
вызовов которых может быть записана и воспроизведена.

В результате получилось нечто вроде того, о чём ты говоришь -
процедуры хранились именно в виде "SomeProc(a, b, c)".

Но у этого подхода получилось много ограничений, в
частности, параметры должны быть
простых типов и без var. (В принципе существенным моментом является то, что их можно восстановить из строкового представления - поэтому имя переменной ты не сможешь передать
ф-и - в рантайме оно не существует, кроме, разве что,
имён компонентов).

Но, возможно, некоторые ограничения удастся снять, если
принять во внимание, что ф-и не должны быть самозаписывающимися
и их вызовы не должны сохраняться между запусками приложения.

Если хочешь, могу выслать код (тестовый проект).


 
skirdov   (2002-11-20 20:26) [8]

То: reonid

Если не трудно, то вышли на skirdov@yandex.ru
Спасибо.


 
Fantasist   (2002-11-21 03:03) [9]


> reonid © (20.11.02 19:29)
> В своё время я экспериментировал с такой вещью:
>


Можно поточнее в чем смысл? Хранить процедуры по именам и вызывать их по именам?


 
reonid   (2002-11-21 12:49) [10]

>Fantasist © (21.11.02 03:03)
>Можно поточнее в чем смысл? Хранить процедуры по именам и >вызывать их по именам?

По сути обычная макросов.

Организовано это так:
Существует класс TMacro.
Внутри скобок Macro1.BeginRecord – Macro1.EndRecord все вызовы некоторого подмножества процедур
с их аргументами фиксируются в объекте Macro1.

(внутри каждой процедуры требуется некий специальный код типа
WriteMacro(@MyProc, [args...]); - хотя. если поместить
их в ДЛЛ - может быть, можно без этого и обойтись,
играясь с таблицами импорта???- но будет ли это проще...)

Их можно сохранить в текстовый файл вида

------macro.txt--------------
SomeProc(10, 20);
OtherProc(40, 70);
ThirdProc("test");
LastProc();
-------------------------

а потом загрузить из файла и выполнить.


 
PVOzerski   (2002-11-21 18:42) [11]

Есть еще одна возможность (притом не для методов, а именно для "автономных" процедур):
сделать их экспортируемыми по имени, а потом вызывать через GetProcAddress. Но список
параметров контролировать придется Вам самим.


 
Fantasist   (2002-11-22 00:20) [12]


> reonid © (21.11.02 12:49)


Ага, примерно ясно. А имена процедур, тоже как параметр чего- нибудь типа "WriteMacro" передаются? А то тут я подумал, что лезем в debug information и вытаскиваем оттуда имена. :)
Никому с таким геморром неохота повозиться? :)





Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.12.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.006 c
4-4691
cyborg
2002-10-20 00:29
2002.12.02
Отслеживать события


1-4472
Gogi
2002-11-20 13:47
2002.12.02
Окна нестандартных форм


8-4514
Vius
2002-08-15 18:28
2002.12.02
Возможно ли на TImageSprite написать текст?


6-4534
Darts
2002-10-03 18:43
2002.12.02
Как в WebBrowser отобразить html c рисунками из ресурсов?


3-4232
фтвкун
2002-11-14 13:09
2002.12.02
TreeView и БД





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