Я пытаюсь интерфейс этот код C ++ — который реализует функции, необходимые для расчета формы линии Voigt — с LabVIEW (в настоящее время я работаю LV2009). Я успешно скомпилировал код в DLL, и я настроил Call Library Function Node
указать на DLL. Однако функция ожидает вектор типа complex double и возвращает вектор типа complex double. Сложный double, однако, не является одним из моих вариантов выбора типа данных при настройке прототипа функции.
К сожалению, я не говорю на C / C ++, поэтому я понятия не имею, как мне изменить код, чтобы получать и возвращать только реальные двойные числа. Я скомпилировал код в MEX-файл для использования с MATLAB и без проблем передаю комплексные числа, поэтому я знаю, что код работает.
Есть ли способ обмануть LabVIEW 2009 для передачи комплексных чисел в и из функций DLL? Если нет, получу ли я эту способность, если обновлюсь до последней версии? Если нет, то есть ли хорошее базовое руководство по C ++, которое научит меня, как изменить функцию, чтобы принимать и возвращать действительные и мнимые части как отдельные векторы?
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
для каждого комплекса, и сделать соответствующий вызов реальной функции.
Других решений пока нет …