DLL без драйвера

Простейшие вопросы в области инженерной разработки
Ответить
rushonda
adviser
adviser
Сообщения: 212
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-19
Благодарил (а): 1 раз

DLL без драйвера

Сообщение rushonda »

Добрый вечер. Вопросик: есть устройство с драйвером, к которому идет dll через которую происходит управление.
Если например драйвер не установлен, то программа не запускается (перечеркнутая стрелка - ошибка dll естественно).
Нельзя ли сделать так, чтобы остальная часть программы при этом работала?
Аватара пользователя
dadreamer

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

Re: DLL без драйвера

Сообщение dadreamer »

rushonda писал(а): 22 май 2020, 23:02Нельзя ли сделать так, чтобы остальная часть программы при этом работала?
Выпилить или задизэйблить все Call Library Function Nodes, например. А если хочется программно, то надо грузить библиотеку динамически и смотреть, грузится она или нет. Для этого надо использовать LoadLibrary из WinAPI и анализировать результат.
rushonda
adviser
adviser
Сообщения: 212
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-19
Благодарил (а): 1 раз

Re: DLL без драйвера

Сообщение rushonda »

dadreamer писал(а): 22 май 2020, 23:12
rushonda писал(а): 22 май 2020, 23:02Нельзя ли сделать так, чтобы остальная часть программы при этом работала?
Выпилить или задизэйблить все Call Library Function Nodes, например. А если хочется программно, то надо грузить библиотеку динамически и смотреть, грузится она или нет. Для этого надо использовать LoadLibrary из WinAPI и анализировать результат.
задизэйблить все - именно так и делал раньше, но хочется сделать как правильно. Гуглил загрузку библиотеки динамически, но примеров вообще нет, может есть пример какой-то?
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5077
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 14 раз
Поблагодарили: 25 раз

Re: DLL без драйвера

Сообщение IvanLis »

rushonda писал(а): 23 май 2020, 20:56задизэйблить все - именно так и делал раньше, но хочется сделать как правильно. Гуглил загрузку библиотеки динамически, но примеров вообще нет, может есть пример какой-то?
Можно в свойствах CLF указать, что путь будет задан...
А перед запуском функции из DLL, проверить путь и если файл DLL отсутствует, то пропускать. Если файл на месте, то запускать CLF.
Но так нужно каждый вызов CLF обернуть..

Снимок экрана от 2020-05-23 20-59-00.png
1.png
Аватара пользователя
dadreamer

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

Re: DLL без драйвера

Сообщение dadreamer »

Да, способ IvanLis самый простой, но в любом случае потребуется сделать своего рода рефакторинг по вызову библиотек по всей программе. При инициализации программы либо проверяете путь к драйверу, либо пробуете грузить DLL с помощью LoadLibrary: https://docs.microsoft.com/en-us/window ... adlibrarya (просто вызовите эту функцию через CLF Node), если вернёт 0, значит загрузка неудачна. Можно даже не вызывать GetLastError далее, а сразу прописать ошибку в кластер error. Ну, и естественно, во всех CLFN надо установить опцию "Specify path on diagram", как на скрине выше показано.
rushonda
adviser
adviser
Сообщения: 212
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-19
Благодарил (а): 1 раз

Re: DLL без драйвера

Сообщение rushonda »

IvanLis писал(а): 23 май 2020, 21:01 Можно в свойствах CLF указать, что путь будет задан...
А перед запуском функции из DLL, проверить путь и если файл DLL отсутствует, то пропускать. Если файл на месте, то запускать CLF.
Допустим не на месте, как тогда запускать CLF, он в программе в любом случае присутствует - соответственно не даст программе запуститься?
Аватара пользователя
dadreamer

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

Re: DLL без драйвера

Сообщение dadreamer »

rushonda, если драйвер отсутствует, возникнет ошибка на проводе error, выходящем из File/Directory Info Function, и программа не зайдёт в зелёный кейс с CLFN, а зайдёт в красный, где его нет. Сама DLL'ка будет грузиться в память только при вызове CLFN, т.к. указано брать путь с диаграммы.
rushonda
adviser
adviser
Сообщения: 212
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-19
Благодарил (а): 1 раз

Re: DLL без драйвера

Сообщение rushonda »

Все ясно, только не пойму, что не так делаю? Программа с разорванной стрелкой)
Вложения
dll.png
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5077
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 14 раз
Поблагодарили: 25 раз

Re: DLL без драйвера

Сообщение IvanLis »

rushonda писал(а): 24 май 2020, 23:49 Все ясно, только не пойму, что не так делаю? Программа с разорванной стрелкой)
Так Вам необходимо функцию указать и сконфигурировать ее.
Проще переделать из того, что уже сделано.
Я же не зря написал:
IvanLis писал(а): 23 май 2020, 21:01Но так нужно каждый вызов CLF обернуть..
Аватара пользователя
dadreamer

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

Re: DLL без драйвера

Сообщение dadreamer »

Если у вас провод error проходит или будет проходить через каждый CLFN, то можно красно-зелёную Case-структуру вообще не городить. Если в проводе будет ошибка, то CLFN не выполнится, а ошибка передастся на дальнейшие инструменты. Так :labview: работает, этим вполне можно пользоваться.
rushonda
adviser
adviser
Сообщения: 212
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-19
Благодарил (а): 1 раз

Re: DLL без драйвера

Сообщение rushonda »

dadreamer писал(а): 25 май 2020, 08:19 Если у вас провод error проходит или будет проходить через каждый CLFN, то можно красно-зелёную Case-структуру вообще не городить. Если в проводе будет ошибка, то CLFN не выполнится, а ошибка передастся на дальнейшие инструменты. Так :labview: работает, этим вполне можно пользоваться.
Случай касается например, когда программу на другую машину переносишь, а dll например (ну предположим) нет, тогда программа не запустится (разорванная стрелка), а хотелось бы пока без dll поработать например. Ну или например переносишь проект на машину другой битности, соответственно dll тоже будет ругаться.
Аватара пользователя
dadreamer

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

Re: DLL без драйвера

Сообщение dadreamer »

rushonda писал(а): 29 май 2020, 17:14Случай касается например, когда программу на другую машину переносишь, а dll например (ну предположим) нет, тогда программа не запустится (разорванная стрелка), а хотелось бы пока без dll поработать например. Ну или например переносишь проект на машину другой битности, соответственно dll тоже будет ругаться.
Вложения
2020-05-29_20-15-13.jpg
Untitled 1.vi
lv2011
(5.86 КБ) 38 скачиваний
rushonda
adviser
adviser
Сообщения: 212
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-19
Благодарил (а): 1 раз

Re: DLL без драйвера

Сообщение rushonda »

А, ясно, нужно просто прописать Function name. Если просто из палитры вставить CLFN, то ошибку выдает. Спасибо
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»