Получить адрес памяти из массива 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:

основной VI функция библиотеки

Заранее благодарю за любой совет / помощь.

1 ответ

Если вам нужно передать указатель на массив labview, вы можете настроить узел "call library function" следующим образом:

  1. На вкладке "Параметры" выберите интересующий вас параметр.
  2. на правой боковой панели выберите "Адаптировать к типу" в раскрывающемся списке "Тип"
  3. выберите "Указатель массива данных" в раскрывающемся списке "Формат данных"

эта установка должна передать указатель на первый элемент вашего массива.

параметры узла функции библиотеки вызовов описаны здесь

Ты можешь использовать MoveBlock Функция LabVIEW.

Вот ссылка с форума NI.

Другие вопросы по тегам