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

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

Добавлено: 24 авг 2017, 13:46
SSL
Добрый день!
Есть 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/Pointe ... -p/1239772, однако, при попытки подсунуть dll-ке указатель на заранее инициализированный статический массив с элементами типа word (u16) labview крашится с ошибкой доступа к памяти, то бишь access violation.

Есть идеи как заставить dll и labview дружить?

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

Добавлено: 24 авг 2017, 14:01
dadreamer
Попробуйте вот так:
Untitled 1.vi
lv2014
(5.48 КБ) 239 скачиваний
Вообще, такие функции, что возвращают размер буфера при неудаче, вызываются в два этапа. Сначала получаем размер буфера, вызвав функцию с пустым буфером. Затем инициализируем буфер и вызываем с "нормальным" буфером.

Полагаю, соглашение о вызове - cdecl. Если не так, то поменяйте на stdcall.

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

Добавлено: 24 авг 2017, 14:58
SSL
Попробовал, но вот только ошибка проводника, при попытке завести массив в pBuffer. Решилось тем что в конфигурации Call library function note поменял тип параметра pBuffer с u16 на array 1d u16, помогло!
Спасибо за помощь!
:bye:

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

Добавлено: 24 авг 2017, 15:02
dadreamer
SSL писал(а):но вот только ошибка проводника, при попытке завести массив в pBuffer.
В первый блок CLFN можно не заводить массив, там заведён ноль. Это должно работать.