Главная страница
    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.008 c
1-4316
Оля
2002-11-21 16:22
2002.12.02
Почему не меняются обои?


4-4662
sancho
2002-10-19 22:36
2002.12.02
Кто знает как открыть окно Дата и Время


14-4570
Yakudza
2002-11-11 16:02
2002.12.02
Как трафик посчитать.


7-4649
Серега С
2002-09-30 11:41
2002.12.02
Интерфейс как в officeXP.


3-4240
koks
2002-11-14 11:56
2002.12.02
Как получить текущее значение генератора..





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