Labview 2011中的DLL加载错误



在LabVIEW中加载DLL时遇到问题
我正在使用LabVIEW连接流量计,为此,制造流量计的公司很好地为我提供了一个subVI库。这些子VI中的每一个都调用来自该公司提供的两个DLL库之一的函数。

因此,这些子VI中有一半依赖于一个DLL,另一半依赖于另一个DLL。那些使用第一个DLL的程序运行得非常好,并且没有任何问题。但是那些使用第二个DLL的人有一些错误:每次我打开其中一个subVI,我都会得到一个弹出窗口,上面写着:

加载"绝对路径\名称.dll"时出错。dll库初始化例程失败。

subVI不可执行,运行按钮显示为已破解。但也有一个转折点。如果我右键单击"配置库功能节点"并选择"配置",然后在适当的字段中重新选择完全相同的dll绝对路径,然后单击"确定",subVI运行得非常好,并且完全按照它应该做的做。我实际上没有在节点配置窗口中更改任何内容,我只是重新选择了相同的路径。更奇怪的是,这种奇怪的"把戏"只有75%的时间有效。另外25%的时间,我需要实际关闭VI和任何其他引用它的VI,然后重新打开它。

还有另一个对我来说更没有意义的转折点:该公司还给我发了几个"示例VI",展示了不同的子VI应该如何相互使用。这些例子运行得非常好!但后来我写了我自己的VI,这是"示例VI"的一个更简单的版本,我一直收到DLL加载错误。

我做错了什么?我如何确保VI是可执行的,而不必每次都重新配置库功能节点?你认为是什么导致了这个问题?

N.B:问题的一部分是,我真的不明白在labview中读取DLL是如何工作的,所以任何关于这方面的信息都将不胜感激。

当您在labview中调用函数(在dll中)时,.dll必须位于此处的某个位置,它可以在链接到该位置的位置(或者我认为与VI/可执行文件位于同一位置)轻松访问。

例如,如果我写一个subVI,说调用stdout写入命令提示符,它将调用windows dll。这个dll应该在每台windows计算机的同一个位置,因为很多windows程序每天都需要它,所以它总是在本地。

c:windowssystem32stdout.dll //note this is and example

现在,当您使用新的流量计VI时,您希望动态链接库位于原始作者(或至少是最后一位编辑)机器上的任何位置。如果他们不在,LabView就会抓狂。

你可以重新链接,并以艰难的方式重新制作VI。抱歉,但这可能是重制它们的最简单方法。

最新更新