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

ActiveX, .NET, DLL
Ответить
SSL
interested
interested
Сообщения: 6
Зарегистрирован: 21 фев 2017, 14:28
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение 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 дружить?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

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

Полагаю, соглашение о вызове - cdecl. Если не так, то поменяйте на stdcall.
SSL
interested
interested
Сообщения: 6
Зарегистрирован: 21 фев 2017, 14:28
Версия LabVIEW: 14.0
Контактная информация:

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

Сообщение SSL »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

SSL писал(а):но вот только ошибка проводника, при попытке завести массив в pBuffer.
В первый блок CLFN можно не заводить массив, там заведён ноль. Это должно работать.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Коммуникация с приложениями»