在LabVIEW中调用动态链接库(DLL)

更新 Nov 8, 2020

环境

软件

  • LabVIEW

程式语言

  • C++
  • C
  • C# .NET

我希望能够在LabVIEW中调用以C/C++编写的代码或API。当我为C代码创建了一个的动态链接库(Dynamically Linked Library,DLL)后,我应该怎样在LabVIEW中调用这个DLL?

若要在LabVIEW中调用DLL,您首先需要确定库的种类是C/C++ DLL还是Microsoft .NET程序集。 .NET DLL也被称作.NET程序集,在.NET程序编写中被广泛地使用。 .NET DLL使用公共语言运行库(Common Language Runtime,CLR)和.NET框架(.NET Framework)对DLL中的功能函数进行组织和管理。
 

使用C/C++ DLL:

  1. 找到头文件(* .h)或功能函数原型定义。
  2. 确定您需要调用的功能函数。注意函数所使用的参数是否仅包含原始数据类型(如整型,字符型,双精度浮点型等)还是包含有其他复杂数据类型(如结构,数组或向量)。
  3. 如果功能函数的参数中不包含任何复杂数据类型且您有相应的头文件(* .h),那么您可以使用导入共享库向导创建包含该头文件中功能函数的LabVIEW库。您可以在工具»导入 »共享库(.dll)中找到该选项:
  1. 如果您没有头文件,那么您需要使用调用库函数节点以及正确的.DLL文档以调用DLL中的功能函数。您可以在下图所示的位置找到调用库函数节点
  1. 双击调用库函数节点打开打开节点的配置窗口。在配置窗口的功能选项卡上,输入DLL的路径并选择需要调用的功能。
  1. 如果您要调用的函数包含复杂数据类型的参数,那么您需要在调用库函数节点的配置对话框中手动定义函数原型(如果当前DLL已使用类型库编译,参数数据和返回类型将被自动定义)。选择配置窗口中的参数选项卡,您需要在该选项卡中添加相应的参数并修改返回值类型,直到窗口底部的函数原型与DLL中的函数定义相匹配。


使用.NET程序集:

  1. 若要在LabVIEW中使用.NET程序集,您只需使用.NET功能选板(连接 ».NET 即可找到所有可用的功能函数。
  2. 首先,您需要使用构造器节点将.NET程序集中的类实例化。双击构造器节点以显示选择.NET构造器对话框。
  1. 您只需将类的引用从构造器节点连接到属性节点调用节点,便可以通过属性节点调用节点简便地访问该类的属性和方法。

Additional Information

请注意,如果您所使用的复杂数据类型是具有多种基本数据类型(整型,双精度浮点型,字符型)的结构,则可以创建一个基于C的封装器DLL以简化函数调用。 C/C++构造中的数据类型并不总是与LabVIEW中的数据类型直接相关,而封装器DLL则可以提取复杂数据结构的内容并将它们转换为适当的原始数据类型。例如,您正在使用的一个DLL采用了一个C中的结构,其中包含一个char *(字符串或字符数组)类型。您的封装器DLL可以包含一个带有char *参数的封装函数,该函数将char *放入一个结构中,然后依次调用原始DLL。在LabVIEW中,您可以改为调用该封装器DLL函数。除此之外,如果您有DLL的源代码,您也可以直接修改DLL,让它直接接收char *类型的参数,而不是一个结构。

在LabVIEW范例查找器中,您可以找到如何在LabVIEW中调用外部代码的完整功能范例。请参阅帮助>>查找范例>>与外部应用程序通信