:: Visual Foxpro, Foxpro for DOS
Восстановить пути
tmp_adr
Автор

Сообщений: 185
Дата регистрации: 29.10.2007
Здравствуйте, что-то подзабыл, как можно обойти такую ошибку, что программа не находит пути к процедуре
Когда в меню запускаешь пункт 2222, который запускает программу curl, то запуская пункт 11111 выходит сообщение , что файл pr1.prg не существует, чё то curl чистит в памяти.
Куда то надо записывать и восстанавливать переменные наверное..

SET SYSMENU OFF
DEFINE MENU _MSYSMENU BAR IN SCREEN
DEFINE PAD p1 OF _MSYSMENU PROMPT "1111" COLOR SCHEME 3
ON SELECTION PAD p1 OF _MSYSMENU DO pr1
DEFINE PAD p2 OF _MSYSMENU PROMPT "22222" COLOR SCHEME 3
ON SELECTION PAD p2 OF _MSYSMENU DO pr2
DEFINE PAD fp OF _MSYSMENU PROMPT "FP" COLOR SCHEME 3
ON SELECTION PAD fp OF _MSYSMENU DO p_fp
SET SYSMENU AUTOMATIC
RETURN
PROCEDURE pr1
MESSAGEBOX("pr1")
return
PROCEDURE pr2
!curl --help
RETURN
PROCEDURE p_fp
CLEAR EVENTS
SET SYSMENU TO DEFAULT
ACTIVATE WINDOW "command"
RETURN
Ratings: 0 negative/0 positive
Re: Восстановить пути
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
Насколько я помню подобную проблему (было очень давно), то стоит попробовать вместо 1111 и 2222 прописать символьные значения, т.е. текст вместо цифр...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Восстановить пути
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
А сорри, невнимательно прочитал.
Перед запуском пункта меню запомни путь, а после выполнения восстанови. Ну как-то так:
LOCAL pcOldDefault
pcOldDefault = goApp.TekDir
*****
DO pr2
******
SET DEFAULT TO (m.pcOldDefault)


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: Восстановить пути
akvvohinc

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
tmp_adr
программа не находит пути к процедуре
Пути к процедуре не ищутся. Пути требуются для нахождения PRG.
Поэтому если имена процедуры и PRG не совпадают (как в вашем случае), то PRG, содержащий требуемую процедуру, должен быть либо уже загружен в память, либо до вызова его надо подгрузить командой SET PROC TO <имя_PRG>

tmp_adr
Когда в меню запускаешь пункт 2222, который запускает программу curl, то запуская пункт 11111 выходит сообщение , что файл pr1.prg не существует, чё то curl чистит в памяти.
Дело не в собственно Curl.

Более удивительно, что процедуры, вызываемые из меню, вообще находятся, ведь после построения меню головной программой, назову её Makemenu, она завершается (выполняет её RETURN).
И по-хорошему непонятно, почему Фокс вообще потом ищет процедуры в файле Makemenu (который уже завершился!).
Видимо, до поры до времени Makemenu хранится в памяти (в стеке вызовов), который очищается после запуска внешнего EXE, и Фокс перестает искать процедуры в Makemenu без явного её указания командой
SET PROC TO Makemenu

Вот и добавьте эту команду в Makemenu, например, перед её RETURN.



Исправлено 1 раз(а). Последнее : akvvohinc, 11.10.22 03:49
Ratings: 0 negative/0 positive
Re: Восстановить пути
tmp_adr
Автор

Сообщений: 185
Дата регистрации: 29.10.2007
Спасибо,
SET PROC TO Makemenu, решило проблему..
akvvohinc
процедуры, вызываемые из меню, вообще находятся, ведь после построения меню головной программой, назову её Makemenu, она завершается (выполняет её RETURN).
Это моя недоработка, сокращал лишнее, чтоб была видна проблема, на самом деле меню вызывается из программы более верхнего уровня, типа
DO Makemenu
READ EVENTS
Поэтому я подумал, пока нет команды clear events, должно храниться в памяти..
Ratings: 0 negative/0 positive
Re: Восстановить пути
akvvohinc

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
tmp_adr
Это моя недоработка, сокращал лишнее, чтоб была видна проблема, на самом деле меню вызывается из программы более верхнего уровня
Значит, то объяснение, которое я дал в предыдущем посте, не совсем точно описывает происходящее, потому что и в этом случае Makemenu завершается.
Однако вызов внешнего EXE не влияет на Makemenu в этом случае - она остается в памяти, и её процедуры остаются доступными и без SET PROC до выполнения CLEAR EVENTS.

Поэтому мне непонятно, как вы вышли на проблему - у меня ваш реальный вариант (до сокращений) работает и без SET PROC.

Возможно, это как-то связано с тем, что Makemenu содержит команды меню, потому что любой другой PRG, содержащий процедуры при аналогичном вызове, будет выгружен из памяти после запуска внешнего EXE, и его процедуры перестанут быть доступными - потребуется явный SET PROC.
-----------

PS
В своё время, когда команда SET PROC допускала подключение лишь одного процедурного файла, а включать все процедуры в один PRG было неудобно, а иногда и невозможно (один из них попадал нам со стороны и в виде FXP), то мы выходили из положения, вызывая процедурные PRG в цикле:
- головная программа вызывала первый процедурный PRG, передавая ему список остальных PRG
- вызванный PRG принимал этот список, вызывал первый PRG из этого списка, передавая ему список остальных PRG
- и так далее пока список PRG не будет пуст
- если очередной PRG получал пустой список, то он вызывал некоторую процедуру головной программы, с которой и продолжалось её выполнение - цикл вызовов замыкался, но ни один процедурный файл не был завершен по RETURN, они все оставались в памяти и их процедуры были всегда доступны.



Исправлено 2 раз(а). Последнее : akvvohinc, 11.10.22 12:20
Ratings: 0 negative/0 positive
Re: Восстановить пути
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() Да, процедура должна быть явно указана в SET PROCEDURE TO, или иметься в "области видимости" (определена в выполняемом prg-файле, или состоять в списке процедур в файлах SET PROC). Кстати, иногда удобно назначать SET PROC ADDITIVE какие-то файлы на время работы [модального] экрана (например, в Init экрана), а потом "убивать" эти временно необходимые процедуры (в Destroy экрана) CLEAR PROC имя...

А так да, использование (области видимости, и их наличие) переменных в фоксе старомодное ([PRIVATE], PUBLIC, LOCAL), но хватает... Не хватает этих настроек к процедурам, хотя опять же, а много ли надо )
Ratings: 0 negative/0 positive
Re: Восстановить пути
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
Вот вы докопались до этой SET PROC И видимости процедур.
Все давно решено. Создал объект с требуемыми методами и дергай их. Хер ли тут умничать?
Ratings: 0 negative/1 positive
Re: Восстановить пути
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Taran
Вот вы докопались до этой SET PROC И видимости процедур.
Все давно решено.
Угу, достаточно вот такой строки в config.fpw
path = work;prgs;prg;prog;progs;programms;form;forms;scrs;scr;screen;menu;menus;report;mnu;qprs;qpr;lbl;lbls;dbf;dbfs;data;frx;frxs;libs;class;classes;..\libs;..\report;d:\fpd26;d:\fpw26;..\apps;include;includes;images;grafics;c:\Program Files\Microsoft Visual FoxPro 9;d:\work\libs;d:\work\tools;d:\work\include;d:\work\libs;d:\work\forgit


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Восстановить пути
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
ssa
Taran
Вот вы докопались до этой SET PROC И видимости процедур.
Все давно решено.
Угу, достаточно вот такой строки в config.fpw
path = work;prgs;prg;prog;progs;programms;form;forms;scrs;scr;screen;menu;menus;report;mnu;qprs;qpr;lbl;lbls;dbf;dbfs;data;frx;frxs;libs;class;classes;..\libs;..\report;d:\fpd26;d:\fpw26;..\apps;include;includes;images;grafics;c:\Program Files\Microsoft Visual FoxPro 9;d:\work\libs;d:\work\tools;d:\work\include;d:\work\libs;d:\work\forgit

Ни черта не понял.
Во первых бездарный состав каталов и соответственно строки.
А во вторых. Никогда не использовал этот параметр именно в config.fpw. Он там вообще ни куда не впёрся.
Есть SET PATH и она более интересна.
А в нормальном приложении и она не нужна.
Ratings: 0 negative/1 positive
Re: Восстановить пути
akvvohinc

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Есть SET PATH и она более интересна.
Обсуждался не доступ к PRG-файлам, а к процедурам, находящимся внутри некоторых PRG.
И здесь никакой PATH не поможет.

Если каждую процедуру ты оформляешь как отдельный PRG, то ради бога - тебе SET PROC не потребуется, но у автора темы все процедуры, вызываемые из меню, находились в одном PRG, и чтобы они выполнялись, требовалось, чтобы этот PRG находился в памяти.
И штатный вариант как этого добиться, как раз и есть команда SET PROC.
Ratings: 0 negative/0 positive
Re: Восстановить пути
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Taran
Ни черта не понял.
Есть чем годиться!
Цитата:
Во первых бездарный состав каталов и соответственно строки.
Как определена бездарность?
Цитата:
А во вторых. Никогда не использовал этот параметр именно в config.fpw. Он там вообще ни куда не впёрся.
Незнание не освобождает от ответственности. А бесполезность для тебя не означает бесполезности для других.
Цитата:
Есть SET PATH и она более интересна.
А в нормальном приложении и она не нужна.
Вот именно. Потому и не используется. Так о чем спичь?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Восстановить пути
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
ssa
Так о чем спичь?

Об умении пользоваться инструментом. И речь вести по существу, а не воду толочь в ступе.
Ratings: 0 negative/0 positive
Re: Восстановить пути
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
akvvohinc
И штатный вариант как этого добиться, как раз и есть команда SET PROC.

Можно бесконечно долго одевать штаны через голову, а программы городить через жопу.
И советовать и разбирать устаревшие технологии.
Ratings: 1 negative/0 positive
Re: Восстановить пути
akvvohinc

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Вот вы докопались до этой SET PROC И видимости процедур.
Все давно решено. Создал объект с требуемыми методами и дергай их. Хер ли тут умничать?

1) Команда SET PROC появилась в Фоксе гораздо раньше каких-либо объектов.
2) Что же касается "умничанья", то создавать некий объект только ради того, чтобы не пользоваться SET PROC, это и есть самое настоящее "умничанье".

Если я не прав, то объясни, чем твой вызов object.function() лучше моего function().
Ratings: 0 negative/0 positive
Re: Восстановить пути
Taran

Сообщений: 13624
Откуда: Красноярск
Дата регистрации: 16.01.2008
akvvohinc
Если я не прав, то объясни, чем твой вызов object.function() лучше моего function().

Если автору топика понадобится, то я объясню.
С тобой комедию ломать мне раньше надоело.
Ratings: 1 negative/0 positive
Re: Восстановить пути
akvvohinc

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
Taran
Можно бесконечно долго одевать штаны через голову, а программы городить через жопу.
Обычная демагогия - никакой полезной инфы.

К тому же - это и не ответ на то, что SET PATH и SET PROC - совершенно разные вещи, и одно не заменяет другое.
Ratings: 0 negative/2 positive
Re: Восстановить пути
akvvohinc

Сообщений: 4218
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Если автору топика понадобится, то я объясню.
Чтобы кому-то что-то понадобилось, надо сначала объяснить смысл предложения, не считаешь?
Ratings: 0 negative/1 positive
Re: Восстановить пути
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
Наверно, каждый прав тот, у кого все работает.
Автору топика написали, и он просто найдет тут вариант, на котором и у него заработает.
А что еще?

Если автор преподает студентам Фокс, то ...
Вряд ли он преподает,
уже никто никуда не идет



Исправлено 2 раз(а). Последнее : Ydin, 24.10.22 12:53
Ratings: 0 negative/0 positive
Re: Восстановить пути
tmp_adr
Автор

Сообщений: 185
Дата регистрации: 29.10.2007
Здравствуйте, хотелось бы тему закрыть, т.к. не желательно, чтоб она превращалась из дискуссии в пикирование, выяснение отношений и препирательства..
Фокс по старой памяти использую для сисадминских задач, в данном случае, фокс запускает скрипт на сайте, берёт оттуда данные раскидывает по таблицам, перекидывает в эксель, где строятся диаграммы для каждого пользователя и закидывает опять на сайт.. Наверняка уже есть продукты которые это делают, но я этого не знаю..
Ratings: 0 negative/0 positive


Эта тема закрыта.

On-line: 25 Alsim alexzima  (Гостей: 23)

© 2000-2024 Fox Club 
Яндекс.Метрика