Страница 1 из 1

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

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

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

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

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

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

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

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

Снимок экрана от 2020-05-23 20-59-00.png
1.png

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

Добавлено: 23 май 2020, 21:36
dadreamer
Да, способ IvanLis самый простой, но в любом случае потребуется сделать своего рода рефакторинг по вызову библиотек по всей программе. При инициализации программы либо проверяете путь к драйверу, либо пробуете грузить DLL с помощью LoadLibrary: https://docs.microsoft.com/en-us/window ... adlibrarya (просто вызовите эту функцию через CLF Node), если вернёт 0, значит загрузка неудачна. Можно даже не вызывать GetLastError далее, а сразу прописать ошибку в кластер error. Ну, и естественно, во всех CLFN надо установить опцию "Specify path on diagram", как на скрине выше показано.

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

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

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

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

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

Добавлено: 24 май 2020, 23:49
rushonda
Все ясно, только не пойму, что не так делаю? Программа с разорванной стрелкой)

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

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

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

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

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

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

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

Добавлено: 29 май 2020, 18:16
dadreamer
rushonda писал(а): 29 май 2020, 17:14Случай касается например, когда программу на другую машину переносишь, а dll например (ну предположим) нет, тогда программа не запустится (разорванная стрелка), а хотелось бы пока без dll поработать например. Ну или например переносишь проект на машину другой битности, соответственно dll тоже будет ругаться.

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

Добавлено: 29 май 2020, 23:15
rushonda
А, ясно, нужно просто прописать Function name. Если просто из палитры вставить CLFN, то ошибку выдает. Спасибо