Получить адрес памяти из массива LabVIEW
Я написал C++ DLL для Visual Studio и добавил оболочку C, чтобы использовать ее на нескольких языках (C++, Python, LabVIEW, ...). В этом я имею дело с изображениями, поэтому 2D массив. Я создал библиотеку labview с использованием инструментов LabVIEW, поэтому я прикрепил эту библиотеку к своему проекту.
Во-первых, функция для выделения и освобождения дескриптора для DLL работает правильно, поэтому связь кажется нормальной. Более того, моя DLL-функция принимает в качестве параметра указатель на первый пиксель изображения, то есть на первое значение вкладки, чтобы воссоздать матрицу (библиотека OpenCV) для выполнения некоторых операций.
Но я не знаю, как получить адрес памяти массива в LabVIEW, и разные посты в интернете не всегда понятны.
Вот функция C:
__declspec(dllimport) unsigned short* __stdcall imAdjustBrightness(void* handle, void * ptrImg, int width, int height, int inputType, int brightnessValue)
{
if (handle)
{
EpsImageProcessing* data = (EpsImageProcessing*)handle;
return data->imAdjustBrightness(ptrImg, width, height, inputType, brightnessValue);
}
return NULL;
}
И скриншоты для VI:
Заранее благодарю за любой совет / помощь.
1 ответ
Если вам нужно передать указатель на массив labview, вы можете настроить узел "call library function" следующим образом:
- На вкладке "Параметры" выберите интересующий вас параметр.
- на правой боковой панели выберите "Адаптировать к типу" в раскрывающемся списке "Тип"
- выберите "Указатель массива данных" в раскрывающемся списке "Формат данных"
эта установка должна передать указатель на первый элемент вашего массива.
параметры узла функции библиотеки вызовов описаны здесь
Ты можешь использовать MoveBlock
Функция LabVIEW.
Вот ссылка с форума NI.