Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
Да, он действительно работает. Как выяснилось, лишние данные, которые служат для доступа к родительским локальным переменным, удаляются из стека не эпилогом локальной функции, а почему-то вставляется после команды call в месте вызова. Поэтому баланс стека в вашем варианте оказывается соблюдён, и он работает (если локальная процедура, конечно, не обращается к родительским локальным переменным).
30-10-2007 08:18 | Комментарий к предыдущим ответам
А... понял :)
В 7-ке работает такой вот "грязный" прием:
Как то мы с Jack of Shadows на Базарной площади обсуждали, можно ли в Delphi так же легко передавать указатели на функции, как в функциональных языках. Пришли к выводу, что если сильно извращаться, то можно сделать многое. Но не все.
Не думаю, что это возможно. Локальные процедуры вызываются по-особому, потому что им ещё через стек передаётся информация о том, где лежат локальные переменные родительской процедуры, поэтому в принципе невозможно вызывать локальную и глобальную процедуры одним и тем же кодом.
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.