Многооконное приложение
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Многооконное приложение
Ага, щас Мы наполняем тему еще более ценной информацией)Elen писал(а):Господа профи - break!!!
dadreamer, Допустим, у вашей библиотеки зависимость от msvcr*.dll. По мере работы программы вызывается функция F1 и она есть в msvcr*.dll. Но в редких случаях вызывается F2, которая тоже есть в msvcr*.dll, но она требует динамической загрузки другой dll из redist пакета.Но в редких случаях вызывается F2, которая тоже есть в msvcr*.dll, но она требует динамической загрузки другой dll из redist пакета.
Это действительно ооочень редкий случай. Когда вызывается то, что не используется. Это как может быть? Автоматически что ли и когда захотелось? Смутно представляю эту ситуации, извините. Если предусмотрен редкий вызов некой F2 - то это не может не остаться не замеченым хотя бы на этапе тестирования. Отнюдь, тестирование не сводится к двум-трём прогонам и занимает временеи не за час и не два часа. Может от двух до пяти дней занимать, в том числе и при запуске на объекте.
Вы же ставите на целевые системы Run-Time , так почему вы хотите пренебречь ран-таймом VC? Он по каким-то причинам не достоин этого?Потому что это ваш инсталлер должен сделать.
Речь была о том, что Вам как бы показалось что labview-юшный рантайм включает в себя Redistributable. А я ответил - что не включает и скорее всего придется Redistributable включать в инсталятор самостоятельно. Откуда LabVIEW-шный рантайм может знать - какую версию Redistributable включить? Он автоматически что ли подхватит его из системы?
Вы поймите - я не доказываю Вам, что Redistributable не нужен и что без него прям классно. Но и без него можно безпроблемно работать вне зависимости от релиза-дебага. Кидайте в папку все зависимости и вперёд. Прошу без фанатизма, типа: "а если зависимостей over100500, че теперь каждую с проектом таскать!?" И я отвечу : "Да"! Можете и так - будет работать. Но в этом случае оправдано будет поставить Redistributable и делать релиз-версию проекта. И не перепутать и не забыть, что у вас может быть по ошибке дебажная версия.
но так доподсовываете, скачаете эксплойт какой-нибудь, в результате трояны загрузятся.
Не нагоняйте жути - это конечно всё возможно, но "волков бояться -в лес не ходить". Уж как нельзя лучше подходит. А вирусы могут и через сеть попасть без всяких скачиваний! Так что же теперь - от интернета отказаться?(это риторический вопрос).
Но законченный продукт должен содержать в себе всё для его корректной работы.
Согласен! И абсолютно не важно, будет ли это Redistributable либо будет это непосредственная библиотека в папке с проектом. Либо и то и другое вместе взятое! Главное - чтобы работало так, как требуется.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Многооконное приложение
Да можно, одним из вариантов может быть реализация с асинхронным вызом .vi. Если вложите свой проект, можем попробовать его собрать.Elen писал(а):А меня интересует вопрос - можно ли на LabView реализовать многооконное приложение (окна вызываются по нажатию пользователем на кнопки в главном окне) так, чтобы на компе у пользователя находился только exe-ник (естественно при наличии установленного инсталлера)???
Для .ехе не важно - есть ли на рабочей машине используемые .vi или нет их.
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Многооконное приложение
Например, происходит критическая ошибка и срабатывает ваш собственный обработчик ошибок. Вы предпринимаете некоторые действия (закрываете устройства, ссылки, объекты, пишете в сообщение в лог, выводите на экран, ...). Вот на таких этапах может что-нибудь случиться, т.к. не всегда можно воссоздать ситуацию с ошибкой, а многие даже не тестируют поведение программы в этих случаях, а лишь при нормальной работе программы. А зависимость при динамическом вызове не видна бывает (LoadLibrary).Это как может быть? Автоматически что ли и когда захотелось?
Согласен с этим.Может от двух до пяти дней занимать, в том числе и при запуске на объекте.
Быть может, путём анализа подключаемой в LV библиотеки. Или включить тот redist-пакет, который использовался при написании . Но видимо он этого не делает ни в каком виде.Откуда LabVIEW-шный рантайм может знать - какую версию Redistributable включить? Он автоматически что ли подхватит его из системы?
На ответственных объектах я бы так делать не рискнул и поставил бы пакет(ы).Кидайте в папку все зависимости и вперёд.
Кстати, попробуйте в настройках линкера поставить следующее:
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
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Многооконное приложение
Elen, как вариант. Тест запуска позволяет запустить произвольное количество VI. Подставьте (переместите иконку VI в константу) нужную вам VI, которую хотите запустить. Можете также передать начальные значения в нужные переменные (имена переменных лучше переносить копипастом, ибо их правильность нигде не проверяется, но при несовпадении регистра, либо лишнего пробела будет возникать ошибка). Сами значения надо закидывать в массив типа Variant. После нажатия на кнопку Стоп в "тест запуска" цикл, который закрывает референсы на запущенные экземпляры VI, их и останавливает. Если нужно, чтобы они продолжали работать, то цикл надо удалить. Запускаемая задача должна быть Reentrant.
Для нормальной работы в составе EXE файла необходимо, чтобы запускаемые VI были в проекте. Этого достаточно.
Для нормальной работы в составе EXE файла необходимо, чтобы запускаемые VI были в проекте. Этого достаточно.
- Вложения
-
- Запуск задачи.vi
- (16.43 КБ) 236 скачиваний
-
- Задача.vi
- (11.59 КБ) 242 скачивания
-
- Тест запуска.vi
- (11.76 КБ) 224 скачивания
-
- beginner
- Сообщения: 46
- Зарегистрирован: 15 окт 2014, 07:27
- Версия LabVIEW: 2013
- Контактная информация:
Re: Многооконное приложение
Большое спасибо Borjomy_1Borjomy_1 писал(а):Elen, как вариант. Тест запуска позволяет запустить произвольное количество VI. Подставьте (переместите иконку VI в константу) нужную вам VI, которую хотите запустить. Можете также передать начальные значения в нужные переменные (имена переменных лучше переносить копипастом, ибо их правильность нигде не проверяется, но при несовпадении регистра, либо лишнего пробела будет возникать ошибка). Сами значения надо закидывать в массив типа Variant. После нажатия на кнопку Стоп в "тест запуска" цикл, который закрывает референсы на запущенные экземпляры VI, их и останавливает. Если нужно, чтобы они продолжали работать, то цикл надо удалить. Запускаемая задача должна быть Reentrant.
Для нормальной работы в составе EXE файла необходимо, чтобы запускаемые VI были в проекте. Этого достаточно.
Именно этот вариант решения проблемы для меня кажется наиболее подходящим (по крайней мере - понятным)!!!!!
Но в связи с этим еще вопрос - главное окно можно сделать недоступным, пока работает вызванное окно?
Спасибо за внимание к простым смертным!
-
- developer
- Сообщения: 257
- Зарегистрирован: 03 янв 2014, 19:37
- Версия LabVIEW: 2016
- Откуда: Украина, Киев
- Контактная информация:
Re: Многооконное приложение
Если надо, чтобы была лёгкая и простая в реализации навигация между разными окнами - я делаю в виде машины состояний.
при наступлении определённого состояния - открываем ту или иную не динамически, а "по-обычному". Так легко можно контроллировать, куда вернуться, допустим, по кнопке "назад" или "домой". И куда перейти "далее".
При динамическом вызове это реализовать не очень легко.
при наступлении определённого состояния - открываем ту или иную не динамически, а "по-обычному". Так легко можно контроллировать, куда вернуться, допустим, по кнопке "назад" или "домой". И куда перейти "далее".
При динамическом вызове это реализовать не очень легко.
колдооооовствооооо! (С)
-
- beginner
- Сообщения: 46
- Зарегистрирован: 15 окт 2014, 07:27
- Версия LabVIEW: 2013
- Контактная информация:
Re: Многооконное приложение
Спасибо за ответ. Прошу прощения за неопытность, а "по-обычному" - это как?AlexanderKonoval писал(а):Если надо, чтобы была лёгкая и простая в реализации навигация между разными окнами - я делаю в виде машины состояний.
при наступлении определённого состояния - открываем ту или иную не динамически, а "по-обычному". Так легко можно контроллировать, куда вернуться, допустим, по кнопке "назад" или "домой". И куда перейти "далее".
При динамическом вызове это реализовать не очень легко.
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: Многооконное приложение
Elen, Если необходимо открывать окно (например диалоговое, либо мастер), то делаете обычный вызов VI, а в свойствах этой VI (VI Propertys/Category (Windows appearance)/Customize...) Установите галки на "Show Front Panel When Called", "Close afterwards if originally closed". Тогда при ее вызове, панель будет "всплывать", и пока VI не закончит работать, вызывающая VI будет остановлена в этом потоке/цикле.
Обратите внимание на индикатор Numeric, который останавливается, когда нажимаете на кнопку Button2.
Обратите внимание на индикатор Numeric, который останавливается, когда нажимаете на кнопку Button2.
- Вложения
-
- Тест запуска.vi
- (14.97 КБ) 228 скачиваний
-
- Задача1.vi
- (11.6 КБ) 219 скачиваний
-
- Запуск задачи.vi
- (16.43 КБ) 218 скачиваний
-
Vitekkz88
- expert
- Сообщения: 1100
- Зарегистрирован: 21 янв 2014, 15:45
- Награды: 3
- Версия LabVIEW: 12,13,14
- Откуда: Томск
- Контактная информация:
Re: Многооконное приложение
В самом простом варианте можно обойтись и без машин состояний. Можно работать в нескольких циклах с case-структурой в каждом.Elen писал(а):
Спасибо за внимание к простым смертным!
Прошу прощения за неопытность, а "по-обычному" - это как?
А остальные .vi Вы планируете откуда вызывать? Разве не из главного окна? Если из главного - то зачем многооконность? Вызывайте каждую .vi как диалоговое окно. Пока оно будет открыто, на главную панель Вы не сможете попасть. Для того, чтобы сделать окно диалоговым, Вам необходимо: Propertys/Category (Windows appearance)/Dialog.главное окно можно сделать недоступным, пока работает вызванное окно?
Прикрепляю оба примера - для многооконности и для диалогового окна.
- Вложения
-
- For2011(MultWindow).zip
- (181.25 КБ) 239 скачиваний
-
- For2011(Dialog).zip
- (175.85 КБ) 224 скачивания
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
-А. И. Солженицын
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Многооконное приложение
Можно и вообще его скрыть, пока работает SubVI.Elen писал(а):Но в связи с этим еще вопрос - главное окно можно сделать недоступным, пока работает вызванное окно?
[color=#FF4000]dadreamer[/color] писал(а):При открытии вашего SubVI скрывайте основную форму, т.е. делайте её невидимой: http://digital.ni.com/public.nsf/allkb/ ... F3006E258B При закрытии SubVI снова показывайте главную форму, передавая в качестве State значение Standard. Посмотрите ещё здесь.
-
- beginner
- Сообщения: 46
- Зарегистрирован: 15 окт 2014, 07:27
- Версия LabVIEW: 2013
- Контактная информация:
Re: Многооконное приложение
Господа, вы сняли камень с моей души - ведь я понятия не имела, что
Огромное всем спасибо, больше вопросов пока нет !!!!!
Как-то эта информация для меня выпала при обучении.Для того, чтобы сделать окно диалоговым, Вам необходимо: Propertys/Category (Windows appearance)/Dialog.
Огромное всем спасибо, больше вопросов пока нет !!!!!