在LabVIEW中向DLL传递复数和从DLL传递复数

Pass complex numbers to and from a DLL in LabVIEW

本文关键字:DLL 中向 LabVIEW      更新时间:2023-10-16

我正在尝试将这个C++代码与LabVIEW接口(我目前正在运行LV2009),该代码实现计算Voigt线形所需的功能。我成功地将代码编译成了DLL,并设置了指向DLL的Call Library Function Node。但是,该函数需要一个复二重类型的向量,并返回一个复双重类型的向量。然而,在设置函数原型时,复杂的double并不是我选择的数据类型之一。

不幸的是,我不会说C/C++,所以我不知道如何修改代码以只获得和返回真正的doubles。我已经将代码编译成MEX文件,与MATLAB一起使用,并且可以毫无问题地传入和传出复数,所以我知道代码是有效的。

有没有办法欺骗LabVIEW 2009在DLL函数中传递复数?如果没有,如果我升级到最新版本,我会获得这种能力吗?如果没有,有没有一个很好的C++基本指南可以教我如何修改函数,接受并返回实数和虚数作为单独的向量?

LabVIEW不允许与C++代码接口,只允许与C代码接口(或者,如果是C++,则必须具有extern "C"声明并使用纯旧类型)。

我看到您的库有C包装器,但它们使用了新的C99complex类型,LabVIEW对此并不理解。

然而,LabVIEW可以将复杂的数据类型传递给函数,看看它是如何完成的。打开名为"调用DLL.vi"的示例,选择复杂的数据种类来查看函数原型和vi。你可能会发现C99complex与LabVIEW具有相同的二进制表示。我没有挖掘这些信息,但这可能很有可能。

如果是这样的话,去教堂,感谢你的主,并使用C包装器与之接口。

如果不是,找一个关于为编译器制作DLL的教程,这并不难,只是需要时间。DLL将为每个复合体使用两个double,并对实际函数进行适当的调用。