for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Re: Как возвратить параметр из программы VFP?
PaulWist

Сообщений: 13590
Дата: 20.01.21 19:35:23
Получить возврат из фокс-ехе у меня не получилось из-за отсутствия StdOut, поэтому использовал рабоче-крестьянский метод через файл.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 3190
Откуда: Москва
Дата: 20.01.21 19:35:35
Simple777
Но "вызывает интерес ввобще такой разрез" - могут ли быть еще какие-то влияния вызванного приложения на исходную программу (кроме команды QUIT, закрывающей FOX-сессию)? В том смысле, что негативные (те, которые не были ожидаемы) влияния возможны в принципе?

Я думаю, что надо просто отвлечься от того, что вызывается именно EXE, а считать, что вызывается обычный PRG, который писался как "самостоятельная прога".

И тогда возможные "проблемы", которые могут всплыть в этом случае, всплывут и в случае EXE, а новых, связанных именно с EXE-вариантом, на мой взгляд, появиться не должно (ну, или в каких-то не совсем стандартных конфигурациях, с которыми я пока дела не имел).



Исправлено: akvvohinc, 20.01.21 19:39
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Sawradym

Сообщений: 2080
Откуда: Винница
Дата: 20.01.21 19:50:53
akvvohinc
lulgu
Насчет корректировок - понятно, для старперов их старые коды почти что святое.

Сделать READ EVENTS условным - такое пережить можно.

Интересно, как Вы себе это приедставляете.

akvvohinc
А вообще, никто пока не знает, что за прогу предстоит вызывать ТС. Может, там и команды такой нет.

Если бы это было так, то у ТС и вопроса по поводу subj не возникло бы.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
lulgu

Сообщений: 1761
Дата: 20.01.21 19:51:53
Настройки могут измениться.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 3190
Откуда: Москва
Дата: 20.01.21 21:27:22
Sawradym
Интересно, как Вы себе это представляете.
Не думал над этим - возможно, что и никак.

Но про "условно" - это я не подумал - раз вторая команда игнорируется, то READ EVENTS можно оставить и безусловным.

Возможно, игнорирование второго READ EVENTS ни к чему плохому и не приведет - все будет работать и на первом.
В чем вы видите невозможность такой работы в принципе?

Sawradym
Если бы это было так, то у ТС и вопроса по поводу subj не возникло бы.
Почему?
По-моему, из топика очевидно, что о возможности вызова EXE через обычный DO ТС просто не знал.



Исправлено: akvvohinc, 20.01.21 21:30
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Sawradym

Сообщений: 2080
Откуда: Винница
Дата: 20.01.21 23:12:32
akvvohinc
Sawradym
Интересно, как Вы себе это представляете.
Не думал над этим - возможно, что и никак.

Но про "условно" - это я не подумал - раз вторая команда игнорируется, то READ EVENTS можно оставить и безусловным.

Возможно, игнорирование второго READ EVENTS ни к чему плохому и не приведет - все будет работать и на первом.
В чем вы видите невозможность такой работы в принципе?

Не будет работать. Без READ EVENTS вы прямым ходом пойдете на следующую команду, а там вскоре и Rreturn, так сказать - не приходя в сознание.
Не проверял, чисто теоретически.



Исправлено: Sawradym, 20.01.21 23:14
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Владимир Максимов

Сообщений: 13874
Откуда: Москва
Дата: 20.01.21 23:45:15
Sawradym
akvvohinc

Сделать READ EVENTS условным - такое пережить можно.

Интересно, как Вы себе это приедставляете.


Напрямую - никак. Но есть масса косвенных признаков. Например, сравнить имя текущей программы program() и имя стартовой программы program(1). Ну, или просто уровень вложенности по ASTACKINFO()

Ну и дальше все просто

  
  if (запущено напрямую)  
      ON SHUTDOWN ...  
      READ EVENTS  
  endif

В любом случае, если предполагается запускать один EXE из другого, во вложенном EXE это надо каким-то образом "обыграть". Просто так, без переделок, ничего не получится

Для возврата значения, первое, что приходит в голову - это глобальная переменная, которую надо определить в основном EXE, а в подчиненном проверить факт ее существования по TYPE(). И если есть, то в нее возвращаемое значение и записывать. Правда, не проверял. Не знаю, сработает ли такой прием...
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
lulgu

Сообщений: 1761
Дата: 21.01.21 01:11:39
Владимир Максимов
Ну и дальше все просто
  
  if (запущено напрямую)  
      ON SHUTDOWN ...  
      READ EVENTS  
  endif

Манипуляции с Program() можно заменить флаг-параметром.
EXE нужно не только открывать, но и закрывать.
Немало настроек понадобятся в двух вариантах не только для второго, но и для первого EXE.
То же самое с обработчиком ошибок, запуском меню и т.д.
Со всем этим что делать?

ЗЫ. Может проще сразу уж объединить программы, чем делать это через IF...ELSE...ENDIF.



Исправлено: lulgu, 21.01.21 01:21
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 3190
Откуда: Москва
Дата: 21.01.21 01:57:14
Цитата:
Не будет работать. Без READ EVENTS вы прямым ходом пойдете на следующую команду, а там вскоре и Rreturn, так сказать - не приходя в сознание.
Вы так пишете, как будто вы автор этой программы.

Может, можно обойтись созданием нового меню, а затем зациклить ACTIVATE MENU.
Тогда к RETURN'у допустите, когда вам будет нужно.

А без шуток - понятно, что не каждую прогу можно вызывать через DO, если она не планировалась заранее к такому использованию.

Владимир Максимов
Для возврата значения, первое, что приходит в голову - это глобальная переменная, которую надо определить в основном EXE, а в подчиненном проверить факт ее существования по TYPE(). И если есть, то в нее возвращаемое значение и записывать. Правда, не проверял. Не знаю, сработает ли такой прием...
Конечно, сработает, так как при таком вызове нет никакой разницы, вызывается ли EXE, APP или PRG - всё глобальное будет видно и внутри.

Но такой способ не требуется - всё можно передать/вернуть через параметры.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
lulgu

Сообщений: 1761
Дата: 21.01.21 03:14:26
akvvohinc
всё можно передать/вернуть через параметры.

В таких случаях параметры лучше передавать как свойства глобального объекта goEmpty = CREATEOBJECT('Empty').
Тогда второй EXE надо делать полностью автономным с возвращением при выгрузке все измененных настроек в исходное состояние.
В первом EXE надо предусмотреть при выгрузке вызов процедуры закрытия второго EXE чтобы оба штатно закрылись.

ЗЫ. А еще лучше написать единый универсальный загрузчик, а проекты обозвать конфигурациями как в 1С.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 21.01.21 08:06:22
akvvohinc
понятно, что не каждую прогу можно вызывать через DO, если она не планировалась заранее к такому использованию.

Естественно. Вообще-то возможна такая ситуация, когда запускаемый (второй) exe-файл является сторонним приложением (и даже возможен расклад, что и исходников нет). В таком случае, надо полагать, exe-файл лучше запускать посредством RUN (или аналогичным способом через сервисы Windows). При таком запуске "по идее" никакого влияния на исходную программу не должно быть, и даже QUIT не должен на исходную программу повлиять.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
ZenTigra
Автор

Сообщений: 477
Дата: 21.01.21 12:36:36
Спасибо за обсуждения, посмотрев их, я пришел к выводу, что лучше необходимую часть функционала из второй программы все таки перенести в первую. Да потрачу некоторое время, но оно будет 100% делать, то что мне нужно.

PS.А такой вопрос возник из-за банальной лени, не хотелось напрягаться... Ведь, то что делает код второй программы, работает, вот только не в автоматическом режиме. Исходники есть что от первой, что от второй программы, но просто так перетянут его без изменений не выйдет.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 21.01.21 12:55:16
А на будущее можно будет заранее принимать меры, чтобы exe-приложение "не валило" стартовую программу.
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Каратаев

Сообщений: 3686
Откуда: Алматы
Дата: 22.01.21 06:30:09
Ну и напоследок ещё вариант... Вторая программа не возвращает значения, а при закрытии пишет их в какой-нибудь файлик, например в обычный txt... А первая программа просто мониторит наличие этого файлика - как только он появился, то считала с него данные и удалила файлик...


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

Re: Как возвратить параметр из программы VFP?
Rifat

Сообщений: 31
Дата: 22.01.21 09:47:55
Как вариант, передавать в вызываемую прогу массив по ссылке.

DIMENSION Array1(1)  
  DO FoxProg.exe WITH @Array1

Смотрим, что записала в массив FoxProg.exe
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Igor Korolyov

Сообщений: 34066
Дата: 23.01.21 00:13:25
Simple777
Хотелось бы уточнить такой момент. Если запускается автономное exe-приложение (написанное на VFP), то разве такое приложение может как-то повлиять на вызвавшую программу? Разве автономное приложение - это не отдельный, независимый процесс Windows?
Если запускается "как автономное exe-приложение, отдельный процесс" то не может. Но команда DO не запускает никаких процессов - она запускает програмный модуль написанный на фоксе - и не важно "упакован" он в exe/app или нет - всё происходит в рамках первого же процесса. Естественно, в этом случае вызванный код может делать всё что угодно - и настройки поменять, и собственно программу завершить "по своему желанию", а не так как предполагал автор "первого" exe.

akvvohinc
А без шуток - понятно, что не каждую прогу можно вызывать через DO, если она не планировалась заранее к такому использованию.
Я бы сказал иначе - лишь "чисто случайно" (0.01%) может оказаться возможным вызвать через DO, выполнить внутри некоторое полезное действие и потом ещё что-то вразумительное получить назад для фоксовой программы собранной в exe и "не планировавшейся заранее к такому использованию". Даже если эта программа это чистый расчётчик безо всякого UI (соответственно и READ EVENTS, меню, _SCREEN/форм и прочего).


------------------
WBR, Igor
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 23.01.21 09:23:02
Igor Korolyov
Если запускается "как автономное exe-приложение, отдельный процесс" то не может. Но команда DO не запускает никаких процессов - она запускает програмный модуль написанный на фоксе - и не важно "упакован" он в exe/app или нет - всё происходит в рамках первого же процесса.

А если 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
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
akvvohinc

Сообщений: 3190
Откуда: Москва
Дата: 23.01.21 13:52:24
Simple777
Насколько понимаю, из приложения FPD (exe, app, fxp) можно по команде RUN вызывать приложение exe, написанное на VFP, а потом благополучно вернуться в среду FPD? Для чего это может пригодиться? Ну, например, для формирования приложением VFP всяких "хитрых" таблиц Excel или для использования каких-либо провайдеров, которые FPD не поддерживает.
Да, мы какое-то время (пока не переписали проги под VFP), так и работали.
Правда, не из-за потребности в Excel'е, а для печати документов "красивого" вида.
Кажется, даже длинные имена XML-файлов, требующихся для обмена с другими организациями, приходилось делать через RUN (правда, VFP для этого не требовался).



Исправлено: akvvohinc, 23.01.21 13:53
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
Simple777

Сообщений: 30063
Дата: 23.01.21 14:33:37
akvvohinc
Да, мы какое-то время (пока не переписали проги под VFP), так и работали.
Правда, не из-за потребности в Excel'е, а для печати документов "красивого" вида.

А можно глянуть какой-нибудь реальный примерчик?

И какие минимально и достаточно прикладывать файлы к exe-модулю?
Ratings: 0 negative/0 positive

Re: Как возвратить параметр из программы VFP?
ssa

Сообщений: 12637
Откуда: Москва
Дата: 23.01.21 14:39:08
Simple777
Или можно будет добавить к exe-файлу ещё парочку файлов с библиотеками (расподожив их в той же папке, где и exe-файл), и этого будет достаточно для работы exe-файла?
Да.
Цитата:
Или библиотеки надо обязательно перед использованием зарегистрировать в Windows?
Нет.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive



Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 8 Igor Korolyov  (Гостей: 7)


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