Передавать комплексные числа в и из DLL в LabVIEW

Я пытаюсь интерфейс этот код C ++ — который реализует функции, необходимые для расчета формы линии Voigt — с LabVIEW (в настоящее время я работаю LV2009). Я успешно скомпилировал код в DLL, и я настроил Call Library Function Node указать на DLL. Однако функция ожидает вектор типа complex double и возвращает вектор типа complex double. Сложный double, однако, не является одним из моих вариантов выбора типа данных при настройке прототипа функции.

К сожалению, я не говорю на C / C ++, поэтому я понятия не имею, как мне изменить код, чтобы получать и возвращать только реальные двойные числа. Я скомпилировал код в MEX-файл для использования с MATLAB и без проблем передаю комплексные числа, поэтому я знаю, что код работает.

Есть ли способ обмануть LabVIEW 2009 для передачи комплексных чисел в и из функций DLL? Если нет, получу ли я эту способность, если обновлюсь до последней версии? Если нет, то есть ли хорошее базовое руководство по C ++, которое научит меня, как изменить функцию, чтобы принимать и возвращать действительные и мнимые части как отдельные векторы?

1

Решение

LabVIEW не позволяет взаимодействовать с кодом C ++, только C (или, если это C ++, он должен иметь extern "C" декларация и использование Plain Old Types).

Я вижу, что в вашей библиотеке есть обертки C, но они используют новый C99 complex тип, который LabVIEW не понимает.

Однако LabVIEW может передавать сложный тип данных в функцию, чтобы увидеть, как это делается, откройте пример с именем «Call DLL.vi» и выберите сложный тип данных, чтобы увидеть прототип функции и VI. Ваш шанс может быть, что C99 complex имеет то же двоичное представление, что и LabVIEW. Я не копался в информации, но это может быть очень возможно.

Если это так, идите в церковь и будьте благодарны своему Господу, и используйте обертку C для взаимодействия с ней.

Если это не так, найдите учебник по созданию DLL для вашего компилятора, это не сложно, просто требует времени. DLL возьмет два double для каждого комплекса, и сделать соответствующий вызов реальной функции.

2

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

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

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