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

Простейшие вопросы в области инженерной разработки
Ответить
rushonda
advanced
advanced
Сообщения: 189
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

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

Сообщение rushonda »

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

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3481
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

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

rushonda
advanced
advanced
Сообщения: 189
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

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
Автор
professor
professor
Сообщения: 4922
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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
Сообщения: 3481
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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
advanced
advanced
Сообщения: 189
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

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

Сообщение rushonda »

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

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3481
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

rushonda, если драйвер отсутствует, возникнет ошибка на проводе error, выходящем из File/Directory Info Function, и программа не зайдёт в зелёный кейс с CLFN, а зайдёт в красный, где его нет. Сама DLL'ка будет грузиться в память только при вызове CLFN, т.к. указано брать путь с диаграммы.

rushonda
advanced
advanced
Сообщения: 189
Зарегистрирован: 26 фев 2016, 06:31
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

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

Сообщение rushonda »

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

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4922
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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

Сообщение IvanLis »

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

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3481
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

Если у вас провод error проходит или будет проходить через каждый CLFN, то можно красно-зелёную Case-структуру вообще не городить. Если в проводе будет ошибка, то CLFN не выполнится, а ошибка передастся на дальнейшие инструменты. Так :labview: работает, этим вполне можно пользоваться.

Ответить

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