【问题标题】:Pass complex numbers to and from a DLL in LabVIEW在LabVIEW中将复数传入和传出DLL
【发布时间】:2014-02-27 20:58:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ dll labview


    【解决方案1】:

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

    我看到您的库具有 C 包装器,但它们使用新的 C99 complex 类型,LabVIEW 无法理解该类型。

    然而 LabVIEW 可以将复杂数据类型传递给函数,要查看它是如何完成的,请打开名为“Call DLL.vi”的示例并选择复杂数据类型以查看函数原型和 VI。您的机会可能是 C99 complex 具有与 LabVIEW 相同的二进制表示。我没有挖掘信息,但很有可能。

    如果是这样,去教堂感谢你的主,并使用 C 包装器来连接它。

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

    【讨论】:

    • 很好的答案。我已经编写了大量在 Labview 中调用的 C/C++ FFT 代码,而包装器是处理复数时要走的路。
    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多