Многооконное приложение

Создание приложений, библиотек, инсталляторов
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Многооконное приложение

Сообщение dadreamer »

Elen, в этой теме по моим ссылкам пройдитесь (eu на ru замените в адресной строке). И вот ещё.
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

Elen писал(а):Господа профи - break!!!
Ага, щас :D Мы наполняем тему еще более ценной информацией)
dadreamer, Допустим, у вашей библиотеки зависимость от msvcr*.dll. По мере работы программы вызывается функция F1 и она есть в msvcr*.dll. Но в редких случаях вызывается F2, которая тоже есть в msvcr*.dll, но она требует динамической загрузки другой dll из redist пакета.Но в редких случаях вызывается F2, которая тоже есть в msvcr*.dll, но она требует динамической загрузки другой dll из redist пакета.
Это действительно ооочень редкий случай. Когда вызывается то, что не используется. Это как может быть? Автоматически что ли и когда захотелось? Смутно представляю эту ситуации, извините. Если предусмотрен редкий вызов некой F2 - то это не может не остаться не замеченым хотя бы на этапе тестирования. Отнюдь, тестирование не сводится к двум-трём прогонам и занимает временеи не за час и не два часа. Может от двух до пяти дней занимать, в том числе и при запуске на объекте.
Вы же ставите на целевые системы Run-Time :labview: , так почему вы хотите пренебречь ран-таймом VC? Он по каким-то причинам не достоин этого?Потому что это ваш инсталлер должен сделать.
Речь была о том, что Вам как бы показалось что labview-юшный рантайм включает в себя Redistributable. А я ответил - что не включает и скорее всего придется Redistributable включать в инсталятор самостоятельно. Откуда LabVIEW-шный рантайм может знать - какую версию Redistributable включить? Он автоматически что ли подхватит его из системы?
Вы поймите - я не доказываю Вам, что Redistributable не нужен и что без него прям классно. Но и без него можно безпроблемно работать вне зависимости от релиза-дебага. Кидайте в папку все зависимости и вперёд. Прошу без фанатизма, типа: "а если зависимостей over100500, че теперь каждую с проектом таскать!?" И я отвечу : "Да"! Можете и так - будет работать. Но в этом случае оправдано будет поставить Redistributable и делать релиз-версию проекта. И не перепутать и не забыть, что у вас может быть по ошибке дебажная версия.
но так доподсовываете, скачаете эксплойт какой-нибудь, в результате трояны загрузятся.
Не нагоняйте жути - это конечно всё возможно, но "волков бояться -в лес не ходить". Уж как нельзя лучше подходит. А вирусы могут и через сеть попасть без всяких скачиваний! Так что же теперь - от интернета отказаться?(это риторический вопрос).
Но законченный продукт должен содержать в себе всё для его корректной работы.
Согласен! И абсолютно не важно, будет ли это Redistributable либо будет это непосредственная библиотека в папке с проектом. Либо и то и другое вместе взятое! Главное - чтобы работало так, как требуется.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

Elen писал(а):А меня интересует вопрос - можно ли на LabView реализовать многооконное приложение (окна вызываются по нажатию пользователем на кнопки в главном окне) так, чтобы на компе у пользователя находился только exe-ник (естественно при наличии установленного инсталлера)???
Да можно, одним из вариантов может быть реализация с асинхронным вызом .vi. Если вложите свой проект, можем попробовать его собрать.
Для .ехе не важно - есть ли на рабочей машине используемые .vi или нет их.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Многооконное приложение

Сообщение dadreamer »

Это как может быть? Автоматически что ли и когда захотелось?
Например, происходит критическая ошибка и срабатывает ваш собственный обработчик ошибок. Вы предпринимаете некоторые действия (закрываете устройства, ссылки, объекты, пишете в сообщение в лог, выводите на экран, ...). Вот на таких этапах может что-нибудь случиться, т.к. не всегда можно воссоздать ситуацию с ошибкой, а многие даже не тестируют поведение программы в этих случаях, а лишь при нормальной работе программы. А зависимость при динамическом вызове не видна бывает (LoadLibrary).
Может от двух до пяти дней занимать, в том числе и при запуске на объекте.
Согласен с этим.
Откуда LabVIEW-шный рантайм может знать - какую версию Redistributable включить? Он автоматически что ли подхватит его из системы?
Быть может, путём анализа подключаемой в LV библиотеки. Или включить тот redist-пакет, который использовался при написании :labview: . Но видимо он этого не делает ни в каком виде.
Кидайте в папку все зависимости и вперёд.
На ответственных объектах я бы так делать не рискнул и поставил бы пакет(ы).

Кстати, попробуйте в настройках линкера поставить следующее:
Project -> Properties:
вкладка Configuration Properties -> Linker -> Input:
изменить значение параметра "Ignore Specific Library" с [пусто] на "MSVCRT" или "MSVCRTD"

https://msdn.microsoft.com/ru-ru/librar ... 80%29.aspx
https://msdn.microsoft.com/ru-ru/librar ... 80%29.aspx
C run-time library (without iostream or standard C++ library): msvcrt.lib
Associated DLL: msvcr80.dll
Characteristics: Multithreaded, dynamic link (import library for MSVCR80.DLL). Be aware that if you use the Standard C++ Library, your program will need MSVCP80.DLL to run.
Option: /MD
Preprocessor directives: _MT, _DLL
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Многооконное приложение

Сообщение Borjomy_1 »

Elen, как вариант. Тест запуска позволяет запустить произвольное количество VI. Подставьте (переместите иконку VI в константу) нужную вам VI, которую хотите запустить. Можете также передать начальные значения в нужные переменные (имена переменных лучше переносить копипастом, ибо их правильность нигде не проверяется, но при несовпадении регистра, либо лишнего пробела будет возникать ошибка). Сами значения надо закидывать в массив типа Variant. После нажатия на кнопку Стоп в "тест запуска" цикл, который закрывает референсы на запущенные экземпляры VI, их и останавливает. Если нужно, чтобы они продолжали работать, то цикл надо удалить. Запускаемая задача должна быть Reentrant.
Для нормальной работы в составе EXE файла необходимо, чтобы запускаемые VI были в проекте. Этого достаточно.
Вложения
Запуск задачи.vi
(16.43 КБ) 234 скачивания
Задача.vi
(11.59 КБ) 240 скачиваний
Тест запуска.vi
(11.76 КБ) 222 скачивания
Elen
beginner
beginner
Сообщения: 46
Зарегистрирован: 15 окт 2014, 07:27
Версия LabVIEW: 2013
Контактная информация:

Re: Многооконное приложение

Сообщение Elen »

Borjomy_1 писал(а):Elen, как вариант. Тест запуска позволяет запустить произвольное количество VI. Подставьте (переместите иконку VI в константу) нужную вам VI, которую хотите запустить. Можете также передать начальные значения в нужные переменные (имена переменных лучше переносить копипастом, ибо их правильность нигде не проверяется, но при несовпадении регистра, либо лишнего пробела будет возникать ошибка). Сами значения надо закидывать в массив типа Variant. После нажатия на кнопку Стоп в "тест запуска" цикл, который закрывает референсы на запущенные экземпляры VI, их и останавливает. Если нужно, чтобы они продолжали работать, то цикл надо удалить. Запускаемая задача должна быть Reentrant.
Для нормальной работы в составе EXE файла необходимо, чтобы запускаемые VI были в проекте. Этого достаточно.
Большое спасибо Borjomy_1

Именно этот вариант решения проблемы для меня кажется наиболее подходящим (по крайней мере - понятным)!!!!!
Но в связи с этим еще вопрос - главное окно можно сделать недоступным, пока работает вызванное окно?

Спасибо за внимание к простым смертным!
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Многооконное приложение

Сообщение AlexanderKonoval »

Если надо, чтобы была лёгкая и простая в реализации навигация между разными окнами - я делаю в виде машины состояний.
при наступлении определённого состояния - открываем ту или иную :vi: не динамически, а "по-обычному". Так легко можно контроллировать, куда вернуться, допустим, по кнопке "назад" или "домой". И куда перейти "далее".
При динамическом вызове это реализовать не очень легко.
колдооооовствооооо! (С)
Elen
beginner
beginner
Сообщения: 46
Зарегистрирован: 15 окт 2014, 07:27
Версия LabVIEW: 2013
Контактная информация:

Re: Многооконное приложение

Сообщение Elen »

AlexanderKonoval писал(а):Если надо, чтобы была лёгкая и простая в реализации навигация между разными окнами - я делаю в виде машины состояний.
при наступлении определённого состояния - открываем ту или иную :vi: не динамически, а "по-обычному". Так легко можно контроллировать, куда вернуться, допустим, по кнопке "назад" или "домой". И куда перейти "далее".
При динамическом вызове это реализовать не очень легко.
Спасибо за ответ. Прошу прощения за неопытность, а "по-обычному" - это как?
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Многооконное приложение

Сообщение Borjomy_1 »

Elen, Если необходимо открывать окно (например диалоговое, либо мастер), то делаете обычный вызов VI, а в свойствах этой VI (VI Propertys/Category (Windows appearance)/Customize...) Установите галки на "Show Front Panel When Called", "Close afterwards if originally closed". Тогда при ее вызове, панель будет "всплывать", и пока VI не закончит работать, вызывающая VI будет остановлена в этом потоке/цикле.
Обратите внимание на индикатор Numeric, который останавливается, когда нажимаете на кнопку Button2.
Вложения
Тест запуска.vi
(14.97 КБ) 226 скачиваний
Задача1.vi
(11.6 КБ) 217 скачиваний
Запуск задачи.vi
(16.43 КБ) 216 скачиваний
Аватара пользователя
Vitekkz88

Activity Silver Автор
expert
expert
Сообщения: 1100
Зарегистрирован: 21 янв 2014, 15:45
Награды: 3
Версия LabVIEW: 12,13,14
Откуда: Томск
Контактная информация:

Re: Многооконное приложение

Сообщение Vitekkz88 »

Elen писал(а):
Спасибо за внимание к простым смертным!
Прошу прощения за неопытность, а "по-обычному" - это как?
В самом простом варианте можно обойтись и без машин состояний. Можно работать в нескольких циклах с case-структурой в каждом.
главное окно можно сделать недоступным, пока работает вызванное окно?
А остальные .vi Вы планируете откуда вызывать? Разве не из главного окна? Если из главного - то зачем многооконность? Вызывайте каждую .vi как диалоговое окно. Пока оно будет открыто, на главную панель Вы не сможете попасть. Для того, чтобы сделать окно диалоговым, Вам необходимо: Propertys/Category (Windows appearance)/Dialog.
Прикрепляю оба примера - для многооконности и для диалогового окна.
Вложения
Много окон
Много окон
Диалоговые окна
Диалоговые окна
For2011(MultWindow).zip
(181.25 КБ) 237 скачиваний
For2011(Dialog).zip
(175.85 КБ) 222 скачивания
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Многооконное приложение

Сообщение dadreamer »

Elen писал(а):Но в связи с этим еще вопрос - главное окно можно сделать недоступным, пока работает вызванное окно?
Можно и вообще его скрыть, пока работает SubVI.
[color=#FF4000]dadreamer[/color] писал(а):При открытии вашего SubVI скрывайте основную форму, т.е. делайте её невидимой: http://digital.ni.com/public.nsf/allkb/ ... F3006E258B При закрытии SubVI снова показывайте главную форму, передавая в качестве State значение Standard. Посмотрите ещё здесь.
Elen
beginner
beginner
Сообщения: 46
Зарегистрирован: 15 окт 2014, 07:27
Версия LabVIEW: 2013
Контактная информация:

Re: Многооконное приложение

Сообщение Elen »

Господа, вы сняли камень с моей души - ведь я понятия не имела, что
Для того, чтобы сделать окно диалоговым, Вам необходимо: Propertys/Category (Windows appearance)/Dialog.
Как-то эта информация для меня выпала при обучении.

Огромное всем спасибо, больше вопросов пока нет !!!!! :1stplace:
Ответить

Вернуться в «Создание приложений»