Указатель для DLL библиотеки

ActiveX, .NET, DLL

Указатель для DLL библиотеки

Postby SSL on 24 Aug 2017, 13:46

Добрый день!
Есть dll библиотека с файлом заголовков которую успешно удалось рассовать по subVI-кам. В библиотеке имеется функция:
int Laser_ReadLaserProgram (DWORD dwLaser, int iNumber, WORD * pBuffer, int iSize)
The function read the laser program from the laser and save it to the buffer. If the size of buffer is too small
for save of the program the function return the required size of the buffer.
Parameters:
DWORD dwLaser - [IN] The handle of laser object
int iNumber - [IN] Number of the laser program
WORD* pBuffer - [IN] The pointer to the buffer for save of the received laser program
int iSize - [IN] Size of the buffer (in words)
Returns:
>0 - the required size of the buffer or
HEE_FUNCTION_NO_ERROR - The command was processed by the laser
HEE_FUNCTION_ERROR - The command was not processed by the laser
HEE_INVALID_LASER_HANDLE - Invalid handle of laser object


Входной параметр pBuffer, как я понимаю, представляет собой указатель на область памяти, для записи в нее считанную лазерную программу.
Порывшись на форумах нашел вот такой вариант https://forums.ni.com/t5/LabVIEW/Pointers-in-Labview/td-p/1239772, однако, при попытки подсунуть dll-ке указатель на заранее инициализированный статический массив с элементами типа word (u16) labview крашится с ошибкой доступа к памяти, то бишь access violation.

Есть идеи как заставить dll и labview дружить?
SSL
interested
interested
 
Posts: 4
Joined: 21 Feb 2017, 14:28
LabVIEW Version: 14.0
Karma: 0

Re: Указатель для DLL библиотеки

Postby dadreamer on 24 Aug 2017, 14:01

Попробуйте вот так:
Untitled 1.vi
lv2014
(5.48 KiB) Downloaded 29 times

Вообще, такие функции, что возвращают размер буфера при неудаче, вызываются в два этапа. Сначала получаем размер буфера, вызвав функцию с пустым буфером. Затем инициализируем буфер и вызываем с "нормальным" буфером.

Полагаю, соглашение о вызове - cdecl. Если не так, то поменяйте на stdcall.
User avatar
dadreamer
doctor
doctor
 
Posts: 2892
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet

Re: Указатель для DLL библиотеки

Postby SSL on 24 Aug 2017, 14:58

Попробовал, но вот только ошибка проводника, при попытке завести массив в pBuffer. Решилось тем что в конфигурации Call library function note поменял тип параметра pBuffer с u16 на array 1d u16, помогло!
Спасибо за помощь!
:bye:
SSL
interested
interested
 
Posts: 4
Joined: 21 Feb 2017, 14:28
LabVIEW Version: 14.0
Karma: 0

Re: Указатель для DLL библиотеки

Postby dadreamer on 24 Aug 2017, 15:02

SSL wrote:но вот только ошибка проводника, при попытке завести массив в pBuffer.

В первый блок CLFN можно не заводить массив, там заведён ноль. Это должно работать.
User avatar
dadreamer
doctor
doctor
 
Posts: 2892
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2017
Karma: 708
I/O VIP vision internet


Return to Коммуникация с приложениями

Who is online

Users browsing this forum: No registered users and 2 guests

cron