![]() |
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум | ![]() |
![]() |
Лисоводы всех стран, объединяйтесь !!! |
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
PaulWist Сообщений: 13590 |
Получить возврат из фокс-ехе у меня не получилось из-за отсутствия StdOut, поэтому использовал рабоче-крестьянский метод через файл.
------------------ Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
akvvohinc Сообщений: 3190 Откуда: Москва |
Я думаю, что надо просто отвлечься от того, что вызывается именно EXE, а считать, что вызывается обычный PRG, который писался как "самостоятельная прога". И тогда возможные "проблемы", которые могут всплыть в этом случае, всплывут и в случае EXE, а новых, связанных именно с EXE-вариантом, на мой взгляд, появиться не должно (ну, или в каких-то не совсем стандартных конфигурациях, с которыми я пока дела не имел). Исправлено: akvvohinc, 20.01.21 19:39 ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Sawradym Сообщений: 2080 Откуда: Винница |
Интересно, как Вы себе это приедставляете. ![]()
Если бы это было так, то у ТС и вопроса по поводу subj не возникло бы. ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
lulgu Сообщений: 1761 |
Настройки могут измениться.
![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
akvvohinc Сообщений: 3190 Откуда: Москва |
Не думал над этим - возможно, что и никак. ![]() Но про "условно" - это я не подумал - раз вторая команда игнорируется, то READ EVENTS можно оставить и безусловным. Возможно, игнорирование второго READ EVENTS ни к чему плохому и не приведет - все будет работать и на первом. В чем вы видите невозможность такой работы в принципе? Почему? По-моему, из топика очевидно, что о возможности вызова EXE через обычный DO ТС просто не знал. Исправлено: akvvohinc, 20.01.21 21:30 ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Sawradym Сообщений: 2080 Откуда: Винница |
Не будет работать. Без READ EVENTS вы прямым ходом пойдете на следующую команду, а там вскоре и Rreturn, так сказать - не приходя в сознание. ![]() Не проверял, чисто теоретически. ![]() Исправлено: Sawradym, 20.01.21 23:14 ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Владимир Максимов Сообщений: 13874 Откуда: Москва |
Напрямую - никак. Но есть масса косвенных признаков. Например, сравнить имя текущей программы program() и имя стартовой программы program(1). Ну, или просто уровень вложенности по ASTACKINFO() Ну и дальше все просто if (запущено напрямую) ON SHUTDOWN ... READ EVENTS endif В любом случае, если предполагается запускать один EXE из другого, во вложенном EXE это надо каким-то образом "обыграть". Просто так, без переделок, ничего не получится ![]() Для возврата значения, первое, что приходит в голову - это глобальная переменная, которую надо определить в основном EXE, а в подчиненном проверить факт ее существования по TYPE(). И если есть, то в нее возвращаемое значение и записывать. Правда, не проверял. Не знаю, сработает ли такой прием... ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
lulgu Сообщений: 1761 |
Манипуляции с Program() можно заменить флаг-параметром. EXE нужно не только открывать, но и закрывать. Немало настроек понадобятся в двух вариантах не только для второго, но и для первого EXE. То же самое с обработчиком ошибок, запуском меню и т.д. Со всем этим что делать? ЗЫ. Может проще сразу уж объединить программы, чем делать это через IF...ELSE...ENDIF. Исправлено: lulgu, 21.01.21 01:21 ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
akvvohinc Сообщений: 3190 Откуда: Москва |
Цитата:Вы так пишете, как будто вы автор этой программы. ![]() Может, можно обойтись созданием нового меню, а затем зациклить ACTIVATE MENU. ![]() Тогда к RETURN'у допустите, когда вам будет нужно. А без шуток - понятно, что не каждую прогу можно вызывать через DO, если она не планировалась заранее к такому использованию. Конечно, сработает, так как при таком вызове нет никакой разницы, вызывается ли EXE, APP или PRG - всё глобальное будет видно и внутри. Но такой способ не требуется - всё можно передать/вернуть через параметры. ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
lulgu Сообщений: 1761 |
В таких случаях параметры лучше передавать как свойства глобального объекта goEmpty = CREATEOBJECT('Empty'). Тогда второй EXE надо делать полностью автономным с возвращением при выгрузке все измененных настроек в исходное состояние. В первом EXE надо предусмотреть при выгрузке вызов процедуры закрытия второго EXE чтобы оба штатно закрылись. ЗЫ. А еще лучше написать единый универсальный загрузчик, а проекты обозвать конфигурациями как в 1С. ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Simple777 Сообщений: 30063 |
Естественно. Вообще-то возможна такая ситуация, когда запускаемый (второй) exe-файл является сторонним приложением (и даже возможен расклад, что и исходников нет). В таком случае, надо полагать, exe-файл лучше запускать посредством RUN (или аналогичным способом через сервисы Windows). При таком запуске "по идее" никакого влияния на исходную программу не должно быть, и даже QUIT не должен на исходную программу повлиять. ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
ZenTigra Автор Сообщений: 477 |
Спасибо за обсуждения, посмотрев их, я пришел к выводу, что лучше необходимую часть функционала из второй программы все таки перенести в первую. Да потрачу некоторое время, но оно будет 100% делать, то что мне нужно.
PS.А такой вопрос возник из-за банальной лени, не хотелось напрягаться... Ведь, то что делает код второй программы, работает, вот только не в автоматическом режиме. Исходники есть что от первой, что от второй программы, но просто так перетянут его без изменений не выйдет. ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Simple777 Сообщений: 30063 |
А на будущее можно будет заранее принимать меры, чтобы exe-приложение "не валило" стартовую программу.
![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Каратаев Сообщений: 3686 Откуда: Алматы |
Ну и напоследок ещё вариант... Вторая программа не возвращает значения, а при закрытии пишет их в какой-нибудь файлик, например в обычный txt... А первая программа просто мониторит наличие этого файлика - как только он появился, то считала с него данные и удалила файлик...
------------------ Никогда не бывает настолько плохо, чтобы не могло быть еще хуже. ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Rifat Сообщений: 31 |
Как вариант, передавать в вызываемую прогу массив по ссылке.
DIMENSION Array1(1) DO FoxProg.exe WITH @Array1 Смотрим, что записала в массив FoxProg.exe ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Igor Korolyov Сообщений: 34066 |
Если запускается "как автономное exe-приложение, отдельный процесс" то не может. Но команда DO не запускает никаких процессов - она запускает програмный модуль написанный на фоксе - и не важно "упакован" он в exe/app или нет - всё происходит в рамках первого же процесса. Естественно, в этом случае вызванный код может делать всё что угодно - и настройки поменять, и собственно программу завершить "по своему желанию", а не так как предполагал автор "первого" exe. Я бы сказал иначе - лишь "чисто случайно" (0.01%) может оказаться возможным вызвать через DO, выполнить внутри некоторое полезное действие и потом ещё что-то вразумительное получить назад для фоксовой программы собранной в exe и "не планировавшейся заранее к такому использованию". Даже если эта программа это чистый расчётчик безо всякого UI (соответственно и READ EVENTS, меню, _SCREEN/форм и прочего). ------------------ WBR, Igor ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Simple777 Сообщений: 30063 |
А если exe-приложение, написанное на VFP, будет запускаться через RUN, то будет запущен отдельный процесс, и никакого прямого влияния он не окажет на исходную программу, так? И ещё вопрос "по ходу пиесы". Насколько понимаю, из приложения FPD (exe, app, fxp) можно по команде RUN вызывать приложение exe, написанное на VFP, а потом благополучно вернуться в среду FPD? Для чего это может пригодиться? Ну, например, для формирования приложением VFP всяких "хитрых" таблиц Excel или для использования каких-либо провайдеров, которые FPD не поддерживает. Во всяком случае, вызов из FPD программ типа Word или Excel выполняется без проблем с минимальными накладными расходами по времени. Загружается, например Word. Далее Word выполняет макрос, указанный в командной строке (при вызове Word). После работы с Word юзер возвращается в приложение FPD. Если таким же образом можно будет работать и с приложениями VFP, то из среды FPD станут доступны многие возможности. ![]() Жаль, что VFP не умеет формировать автономные exe-файлы. Или можно будет добавить к exe-файлу ещё парочку файлов с библиотеками (расподожив их в той же папке, где и exe-файл), и этого будет достаточно для работы exe-файла? Или библиотеки надо обязательно перед использованием зарегистрировать в Windows? Исправлено: Simple777, 23.01.21 09:38 ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
akvvohinc Сообщений: 3190 Откуда: Москва |
Да, мы какое-то время (пока не переписали проги под VFP), так и работали. Правда, не из-за потребности в Excel'е, а для печати документов "красивого" вида. Кажется, даже длинные имена XML-файлов, требующихся для обмена с другими организациями, приходилось делать через RUN (правда, VFP для этого не требовался). Исправлено: akvvohinc, 23.01.21 13:53 ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
Simple777 Сообщений: 30063 |
А можно глянуть какой-нибудь реальный примерчик? И какие минимально и достаточно прикладывать файлы к exe-модулю? ![]() |
||
Re: Как возвратить параметр из программы VFP? | |||
---|---|---|---|
ssa Сообщений: 12637 Откуда: Москва |
Да. Цитата:Нет. ------------------ Лень - это неосознанная мудрость. ![]() |
||
© 2000-2021 Fox Club  |