Re: Как передать массив в SCX-файл? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Представь, что тебе в программе нужно вызывать некую функцию/процедуру, которой не будет в этом EXE (например, будет создаваться на лету или будет находиться во внешнем (процедурном или непроцедурном) файле).
() Если внешний файл с процедурами, то его можно "подключать" налету, перед: SET PROCEDURE TO (имя_процедурного_файла) ADDITIVE и "отключить" (на всякий случай) после использования: RELEASE PROCEDURE (имя_процедурного_файла) |
Re: Как передать массив в SCX-файл? | |
---|---|
sphinx Автор Сообщений: 31184 Откуда: Каменск-Уральски Дата регистрации: 22.11.2006 |
Нет, Олег, ты не понял. При SET PROCEDURE процедурный файл закомпилится в проект, а Сергей (akvvohinc) пишет о том, что получится вызвать из готового EXE другой, внешний файл.
------------------ "Veni, vidi, vici!"(с) |
Re: Как передать массив в SCX-файл? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
К тому же в FPD не было возможности этого ADDITIVE (опция отсутствовала) - нормально можно было подцепить лишь один процедурный файл одновременно. Для обхода этого ограничения мы применяли другую "хитрость". Я уже как-то ее здесь описывал. Не думаю, что сейчас это актуально, но если кому интересно, то могу повторить. |
Re: Как передать массив в SCX-файл? | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
И что за хитрость?
|
Re: Как передать массив в SCX-файл? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> При SET PROCEDURE процедурный файл закомпилится в проект - это не так. Имя процедурного PRG/FXP вообще может быть неизвестно проекту, и вобще может быть только в фантазиях разраба, создаваться "динамически"... > Олег, ты не понял Нет, я понял. Просто процедурный файл не компилится как проект, а просто компилится PRG->FXP. В таком слабом "компилении" можно применять в коде неизвестные имена и процедуры... |
Re: Как передать массив в SCX-файл? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Если компилятор при создании EXE не будет "видеть" процедурный файл, то это и есть ситуация, которую я описывал. Но тогда мне непонятно, с какой целью ты вообще упомянул о SET PROCEDURE? Проблема же не в том, как и когда подключать процедурный файл, а в том, что при создании EXE без процедурного файла компилятор выдаст тебе кучу сообщений Unable to find Unknown ... так как будет искать вызываемые процедуры, находящиеся в процедурном файле и не найдет их. Применять можно. Но придется нажимать кнопку Ignore All при каждой сборке EXE. Но Саша и создал эту тему как раз для того, чтобы избавиться от выскакивающих сообщений, хотя тоже мог их просто игнорировать. Исправлено 2 раз(а). Последнее : akvvohinc, 07.12.20 06:14 |
Re: Как передать массив в SCX-файл? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Сейчас уже поздно (или рано? ), пора баиньки - завтра днем расскажу. Исправлено 1 раз(а). Последнее : akvvohinc, 07.12.20 06:18 |
Re: Как передать массив в SCX-файл? | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
akvvohinc, это лирическое отступление, навеяло темой. Виноват.
Саша начинал ветку про реальный массив внутри одного проекта в разных модулях, меня повело на отсутствующие элементы внутри проекта вообще, что их можно определить в специальном PRG и подключить SET PROC ADDI... |
Re: Как передать массив в SCX-файл? | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Кстати, совершенно верно про: "чтобы просто не выскакивало" при компиляции. Сейчас вот припомнился один давнишний проект на FPD2.6, который, когда компилировал, выскакивало сообщение об отсутствии массива. Но я знал, что он создается там "из воздуха" еще до этой процедуры, просто жал "игнорировать", и оно нормально компилировалось и потом без проблем работало. Хотя по идее вот такая вставка указания на "внешность массива" конечно убирала бы такие предупреждения. Но раз уж оно работало, стало быть предупреждение было не критическим, т.е. не "фатальной ошибкой", а как бы просто "на всякий случай". ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 07.12.20 10:36 |
Re: Как передать массив в SCX-файл? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Меня удивляло, что разработчики не дали возможности отключить данное предупреждение по желанию какой-нибудь настройкой. И вообще я не понимаю, почему они так озаботились именно массивами - можно подумать, что с возможным отсутствием скалярной внешней переменной проблем в рантайме не будет. |
Re: Как передать массив в SCX-файл? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Она подсмотрена, если память не подводит, в каком-то журнале FoxTalk. Принцип прост - он основан на "зацикливании" вызовов программ, которые в результате не завершаются, а остаются в памяти на все время выполнения головной программы, а поэтому все содержащиеся в них процедуры/функции доступны из любого места: 1) Головная программа вызывает первый процедурный файл и через параметры передает ему имена остальных процедурных файлов, требующих подключения. 2) Каждый вызванный процедурный файл проверяет параметры: - если параметров нет, то он является последним подключаемым файлом в цепи и должен вызвать определенную процедуру головного файла - цепь замкнется. - если параметры есть, то он вызывает процедурный файл, имя которого содержится в первом параметре, передавая ему остальные параметры. Структура головного файла (main.prg):
Получилась такая цепочка вызовов:
При этом SET PROCEDURE осталась без дела и ей можно пользоваться в обычном режиме. Исправлено 8 раз(а). Последнее : akvvohinc, 07.12.20 17:24 |
Re: Как передать массив в SCX-файл? | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
ХитрО!
|
Re: Как передать массив в SCX-файл? | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
А какова максимально допустимая глубина вложенности вызовов в FPD была? Не будет ли "лекарство" хуже болезни Пожрав половину возможного колл-стэка
------------------ WBR, Igor |
Re: Как передать массив в SCX-файл? | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
В FPD было 32, так что количество файлов, прицепленных таким путем, безграничным не назовешь.
У нас их было 3 - жить не мешало. А кому-то могло и не подойти. |
Re: Как передать массив в SCX-файл? | |
---|---|
andrewk Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
В FPD-редакторе экранной формы в разделе SETUP пишем:
Я этот вопрос и в FPD и в VFP решил, по-моему, ещё лучше. Создал Unknowns.prg, в котором перечислены все «внешние» процедуры:
Опции additive в FPD нет, к сожалению. Оно работает, но нужно помнить, что в FPD лишь 32 уровня вложенности вызовов, потом "Do nesting too deep". А при такой технологии каждый процедурный файл отнимает один уровень и в конце ещё один для "do main1". Ну да, и я о том же. Я решил этот вопрос так. У меня каждый процедурный файл – это не исполняемая PRG-шка, а типа библиотека процедур на одну тему. Головной файл проекта - меню, то есть MPR-файл. У него в Cleanup-коде вставил директивы "#Insert procs1.prg", "#Insert procs2.prg"… Таким образом, генератор меню по итогу создаёт здоровенный MPR-файл, который содержит все процедуры из всех procs*.prg. А поскольку он запускается первым, то все эти процедуры видны везде без SET PROCEDURE. Все эти procs*.prg включены в проект, поэтому проверяются при сборке. Но сделаны Exclude – чтоб код в APP не задваивался. При этом в программе остаётся возможность при работе подключить SET PROCEDURE <АвтоСобираемая.prg> |
Re: Как передать массив в SCX-файл? | |
---|---|
lulgu Сообщений: 1838 Дата регистрации: 30.11.2016 |
А ведь всего проблем-то - перенести все эти "DOC-изобретения" из .prg в Custom-классы, которые для этого и предназначены.
|
Re: Как передать массив в SCX-файл? | |
---|---|
andrewk Сообщений: 174 Откуда: Красноярск Дата регистрации: 15.05.2005 |
Речь идёт про FPD. |
Re: Как передать массив в SCX-файл? | |
---|---|
Божья_коровка Сообщений: 25731 Дата регистрации: 23.08.2001 |
От модератора:
Весь флуд был перенесен в Курилку. Для желающих, вот ссылка на тему - forum.foxclub.ru ------------------ Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается... |
© 2000-2024 Fox Club  |