解决方案
当 LabVIEW 使用调用库函数节点调用 DLL 时,会创建一个对该 DLL 的引用。该引用会一直保留在内存中,直到调用该 DLL 的 VI 被关闭为止。可以通过以下两种方式解决:
- 动态卸载 DLL
- 让调用 DLL 的 VI 由另一个 VI 动态调用
动态卸载DLL
1.在“调用库函数”对话框中勾选“在程序框图中指定路径(Specify path on diagram)”选项。双击“调用库函数”节点(Call Library Function node)可以打开该对话框,如下图所示。
2.选中“ 在程序框图中指定路径”参数后,“调用库函数”上将显示名为路径输入(path in)的接线端,用于接收待调用 DLL 的路径。执行调用库函数时,指定的DLL就会被调入内存中,如下图所示。

3.路径输入接线端也可用于将之前加载的库从内存中卸载。将一个空路径常量(Empty Path Constant)连接到最初加载 DLL 的同一个调用库函数节点的路径输入接线端。下图为一个示例。循环第一次运行时,首次调用函数节点执行条件结构的True分支,调用DLL;从第二次循环开始,当Unload这个布尔输入控件值为真时,再次执行条件结构的True分支,此时会卸载DLL,同时也停止循环;当Unload这个布尔输入控件值为假时,进入条件结构False分支(图中未显示),其中仅包含一些定时逻辑,无其他代码。

使用动态调用的 VI
如果使用调用库函数节点的 VI 被关闭,则对 DLL 的引用也会被释放。因此,如果一个主 VI 动态调用另一个包含 DLL 调用的次级 VI,那么在不关闭主 VI 的情况下,只需关闭次级 VI,即可释放 DLL 句柄所占用的内存。有关如何使用打开 VI 引用实现此功能,请参阅 LabVIEW 产品文档中的动态调用VI相关内容。