我在LabVIEW中加载DLL时遇到了问题 我正在使用LabVIEW连接到流量计,为此目的,制造流量计的公司非常好,可以给我一个子VI库。这些子VI中的每一个都从公司提供的两个DLL库中的一个调用函数。
这些子VI中有一半依赖于一个DLL,而另一半依赖于另一个DLL。 那些使用第一个DLL的人完美地工作,并且它们没有问题。 但是那些使用第二个DLL的人有一些错误:每当我打开其中一个子VI时,我会看到一个弹出窗口:
加载“absolute path \ name.dll”时出错。 DLL库初始化例程失败。
子VI不可执行,运行按钮显示为已破解。但有一个转折点。如果我右键单击“配置库函数节点”并选择“配置”,然后在相应的字段中重新选择完全相同的 dll绝对路径,然后单击“确定”,子VI运行得非常好并完全执行应该这样做。我实际上并没有在节点配置窗口中更改任何内容,我只是重新选择相同的路径。更奇怪的是,这种奇怪的“技巧”仅在75%的时间内起作用。另外25%的时间,我需要实际关闭VI和引用它的任何其他VI,然后重新打开它。
然后还有另一种扭曲对我来说更不合理:公司还给我发了几个“示例VI”,显示了不同的子VI应该如何相互使用。这些例子运行得非常好!但后来我编写了自己的VI,它是“示例VI”的简单版本,我不断收到DLL加载错误。
我做错了什么,如何确保VI可执行而无需每次都重新配置库函数节点?您认为导致问题的是什么?
N.B:部分问题在于我并不真正理解如何在labview中阅读DLL,因此任何有关它的信息也将非常受欢迎。
答案 0 :(得分:0)
当您在labview中调用函数(在dll中)时,.dll必须位于此处的某个位置,它可以在链接到该位置时轻松访问(或者我相信与VI /可执行文件位于同一位置)。
例如,如果我写一个subVI,说调用stdout写入命令提示符,它将调用一个windows dll。这个dll应该在每个自windows计算机的相同位置,因为很多windows程序需要它来进行日常使用,所以它总是被定位。
c:\windows\system32\stdout.dll //note this is and example
现在,当您使用新的流量计VI时,它希望动态链接库位于原始作者(或至少是最后一个编辑器)机器上的位置。如果他们不在那里,LabView就会吓坏。
你可以重新思考,并以艰难的方式重拍VI。抱歉,这可能是重拍它们的最简单方法。