Создание DLL в LabVIEW

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

Re: Создание DLL в LabVIEW

Postby duke-kta on 27 Nov 2017, 11:47

dadreamer, скорее всего так и придётся делать.
Странно, что при вызове через Call Library Function Node скомпилированного DLL автоматом не проставляются параметры - приходится врукопашную добавлять. Может, я где-то галочку не поставил или так и должно быть?
User avatar
duke-kta
beginner
beginner
 
Posts: 15
Joined: 28 Jun 2017, 13:44
Location: НиНо
LabVIEW Version: 13
Karma: 0

Re: Создание DLL в LabVIEW

Postby dadreamer on 27 Nov 2017, 12:04

duke-kta wrote:Странно, что при вызове через Call Library Function Node скомпилированного DLL автоматом не проставляются параметры - приходится врукопашную добавлять. Может, я где-то галочку не поставил или так и должно быть?

Должно. Откуда программе знать, какие у ваших функций параметры? Они же не экспортируются для cdecl и stdcall соглашений.

А в чём смысл вызывать из :labview: скомпилированную в нём же библиотеку? Не проще ли юзать SubVI?
User avatar
dadreamer
professor
professor
 
Posts: 3129
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Создание DLL в LabVIEW

Postby duke-kta on 27 Nov 2017, 14:12

Откуда программе знать, какие у ваших функций параметры?

На другом, почему-то, знает, но это уже мелочи...
А в чём смысл вызывать из :labview: скомпилированную в нём же библиотеку? Не проще ли юзать SubVI?

ну, тут сложный момент... Метрология, однако )))
Если кратко, то для аттестации стенда, как измерительного прибора.
Суть, DLL-ки не меняются. В них измерительные функции и они аттестованы вместе со стендом.
Морда программы может меняться как угодно и эти изменения не касаются аттестации, если мы в ней просто вызываем эти самые аттестованные функции.

Кстати, переустановил LV13 (не удаляя, даже) - всё заработало. Причём, в LV15 компиляция тоже осталась.
Здесь http://digital.ni.com/public.nsf/allkb/ ... E800728A7B написано, что LV14 уже правит все эти беды.
Так что, если у кого-то пропадает компиляция DLL в какой-либо версии LV, надо переставить эту версию поверх старой.
User avatar
duke-kta
beginner
beginner
 
Posts: 15
Joined: 28 Jun 2017, 13:44
Location: НиНо
LabVIEW Version: 13
Karma: 0

Re: Создание DLL в LabVIEW

Postby dadreamer on 27 Nov 2017, 15:15

duke-kta wrote:На другом, почему-то, знает, но это уже мелочи...

На другом :labview: ? Единственное место, где прописаны прототипы функций - это заголовочный файл *.h, который создаётся при компиляции DLL. Чтобы :labview: создал :vi: с уже настроенным блоком CLFN, нужно запустить Мастер импорта (Tools -> Import -> Shared Library) и указать оба файла: *.dll и *.h. Уверены, что не пользовались Мастером и не прописывали ничего вручную?..
duke-kta wrote:Суть, DLL-ки не меняются. В них измерительные функции и они аттестованы вместе со стендом.

А почему нельзя аттестовать :vi: ? У DLL есть какое-то принципиальное преимущество в этом плане?

Я в общем-то вот почему спрашиваю:
dadreamer wrote:Но вообще, по идее, вызывать DLL, созданную в :labview: , из самого :labview: - это большое извращение, т.к. происходит двойная конвертация параметров при передаче на стек и отсюда возрастают накладные расходы на вызов функции. Создавать DLL в :labview: имеет смысл, только когда нужно вызывать её из другой IDE (C/C++, Delphi, VB). А в самом :labview: гораздо проще и удобнее создавать SubVI, в том числе и при необходимости подключения разных подпрограмм (плагинов).

Причём, это не мои выдумки. Специалисты на форумах ni.com давно об этом пишут.
User avatar
dadreamer
professor
professor
 
Posts: 3129
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Re: Создание DLL в LabVIEW

Postby duke-kta on 27 Nov 2017, 15:51

dadreamer,
не пользовались Мастером и не прописывали ничего вручную?

На другом компе - не знаю что там стояло по умолчанию, но я ничего не прописывал. Возможно, там настроено, искать в той же папке или ещё что - но это ладно, я уже нашёл как сделать и твой совет помог.
А почему нельзя аттестовать :vi:

Типа, суть в разделении измериловки и пользовательского интерфейса.
Ну, где-то я с ним согласен - VI вызывать можно только из LV, а DLL откуда угодно.
То есть, можно эти DLL-ки проверить из любой другой программы - так и аттестовать...
Ну, там мутно всё в этой метрологии.
Ну, хотят так - нате вам так!
Но вообще, по идее, вызывать DLL, созданную в :labview: , из самого :labview: - это большое извращение

Абсолютно согласен! Но!
Есть у нас "идейный генератор" один, которому не объяснишь, что разницы никакой, почти, а геморроя больше.
И он непосредственно связан с заказчиком...
User avatar
duke-kta
beginner
beginner
 
Posts: 15
Joined: 28 Jun 2017, 13:44
Location: НиНо
LabVIEW Version: 13
Karma: 0

Re: Создание DLL в LabVIEW

Postby Vitekkz88 on 28 Nov 2017, 06:14

duke-kta, ну дк Ваш идейный генератор смотрит наперёд в плане аттестации именно .dll. Наделать и аттестовать SubVI не проблема, но! завтра LabVIEW-шинки разбегутся по другим темам и направлениям, а найти замену будет в десятки раз сложнее, нежели программиста С/С++. Через 2-3 года политика партии поменяется, захочется перейти на рельсы C#, например. Начнут запиливать новый проект и хоба, а функции то в SubVI и другой библиотеки аттестованных функций нет. Сядут в калошу и контора попадёт на бабки папки, чтоб опять же запилить уже нормальную dll-ку с необходимой функциональностью. Ну а пока есть LV со своими сильными сторонами - её и используют, но не уповают по всей видимости.
dadreamer, а почему так происходит? Двойная конвертация параметров и всё такое...я чет :dntknw: Подозреваю, что при создании dll LabVIEW как-то по хитрому данные заворачивает, да?
Вроде как в классике такого нету(вызываем C++/С# dll в VisualStudio на этих же языках)... :think:
Инженер - это открыто светящийся интеллект, свободный и не обидный юмор, это легкость и широта мысли...Это воспитанность, тонкость вкусов, хорошая речь, плавно согласованная и без сорных словечек...
-А. И. Солженицын
User avatar
Vitekkz88
expert
expert
 
Posts: 1045
Joined: 21 Jan 2014, 15:45
Location: Томск
Medals: 3
Activity (1) Silver (1) Автор (1)
LabVIEW Version: 12,13,14
Karma: 301
hardware I/O VIP

Re: Создание DLL в LabVIEW

Postby dadreamer on 28 Nov 2017, 09:13

Vitekkz88 wrote:dadreamer, а почему так происходит? Двойная конвертация параметров и всё такое...я чет :dntknw:

Да тут на самом деле всё просто. Что exe, что dll, скомпиленная в :labview: , суть загрузчик + llb с ВИайками внутри. Когда вызываем какую-нибудь библиотеку из :labview: через CLFN, :labview: конвертирует типы данных в C-нотацию для передачи в универсальную обёртку, вызывающую конечную библиотеку (ExtFuncWrapper). Параметры кладутся на стек, вызывается ExtFuncWrapper, загружается библиотека, и либо линкуется к текущему процессу (если написана в той же версии :labview: ), либо подгружает свой LVRT Engine и линкуется к нему. Параметры подбираются со стека, конвертируются в :labview: -нотацию и передаются в функции (SubVI). Так что получается цепочка " :labview: -> C -> :labview: " в одну сторону, так же и обратно. Очевидно, что страдает производительность, особенно в случае использования нескольких lvrt в одном процессе, а также при первом вызове библиотеки, когда происходит lazy-загрузка в память.
User avatar
dadreamer
professor
professor
 
Posts: 3129
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 790
I/O VIP vision internet

Previous

Return to Создание приложений

Who is online

Users browsing this forum: No registered users and 1 guest

cron