Собственный вектор & lt; Double & gt; в LabView в качестве аргумента / возврата

Я делаю обертку для C ++ DLL. В функции мне нужно вернуть vector<double>, Я изучил документы и прочитал, что мы можем только вернуть int а также string, Для возврата любых других переменных нам нужно передать это в качестве аргумента. Но доступные типы переменных Numeric, String, Array, Так как я могу получить vector<double> из нативной функции в LabView.

1

Решение

В C ++ вектор хранится в виде массива, если v vector <double> адрес первого элемента &v[0], В LabVIEW CLFN узел позволяет передавать массив по указателю или по дескриптору. Итак, у вас есть 3 решения:

  1. Передайте предварительно выделенный массив в вашу DLL (по указателю), заполните его, он будет доступен после того, как CLFN завершит выполнение.
  2. Передайте массив в CLFN дескриптором, измените его размер соответствующим образом менеджером памяти LabVIEW, и содержимое массива будет доступно после того, как CLFN завершит выполнение.
  3. Если массив очень большой (100 МБ), и вам действительно нужно использовать std: vector в вашем коде C ++, я бы предложил определить ваш собственный распределитель на основе менеджера памяти LabVIEW, чтобы избежать копирования.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]