2

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

所以这些子VI中有一半依赖于一个DLL,另一半依赖于另一个DLL。那些使用第一个 DLL 的人工作得很好,而且他们没有问题。但是那些使用第二个 DLL 的人有一些错误:每次我打开这些子 VI 中的一个时,我都会得到一个弹出窗口,上面写着:

加载“绝对路径\name.dll”时出错。DLL 库初始化例程失败。

子VI则无法执行,运行按钮显示为已破解。但是有一个转折点。如果我右键单击“配置库函数节点”并选择“配置”,然后在相应字段中重新选择完全相同的dll 绝对路径,然后单击“确定”,子 VI 运行得非常好,并且完全按照它应该做的那样工作。我实际上并没有在节点配置窗口中更改任何内容,我只是重新选择了相同的路径。更奇怪的是,这个奇怪的“技巧”只有大约 75% 的时间有效。另外 25% 的时间,我需要关闭 VI 和任何其他引用它的 VI,然后重新打开它。

然后还有另一个对我来说更没有意义的转折:公司还给我发送了几个“示例 VI”,它们显示了不同的子 VI 应该如何相互使用。这些示例运行良好!但是后来我编写了自己的 VI,它是“示例 VI”的更简单版本,并且我不断收到 DLL 加载错误。

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

注意:部分问题是我并不真正了解在labview 中读取DLL 是如何工作的,因此任何有关这方面的信息也将不胜感激。

4

1 回答 1

0

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

例如,如果我编写一个子VI,它说调用stdout 来写入命令提示符,它将调用一个windows dll。这个 dll 应该在每台 Windows 计算机中的同一个位置,因为很多 Windows 程序需要它用于日常使用,所以它总是会被定位。

c:\windows\system32\stdout.dll //note this is and example

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

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

于 2013-08-23T19:10:17.687 回答