【问题标题】:DLL Load Error in Labview 2011Labview 2011 中的 DLL 加载错误
【发布时间】:2013-07-26 08:17:07
【问题描述】:

我在 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 是如何工作的,因此我们也非常感谢任何有关这方面的信息。

【问题讨论】:

  • LabVIEW DLL 处理非常简单,它加载 DLL 并列出函数。 DLL 加载(在 VI 打开时)通常由于不满足的依赖关系或 DLL 初始化失败而失败。您可以访问 DLL 的源代码吗?它在Dependency Walker 中是否正确打开?
  • 很遗憾,我无权访问 DLL 源代码,但我已经下载了依赖项walker。 DLL 似乎打开得很好,虽然我真的不知道如果没有依赖 wlaker 会说什么。有趣的是,我将我自己的 VI 移动到与示例 VI 相同的目录中,我注意到了这一点:如果我打开示例 VI 然后我自己的 VI,则不会引发 DLL 加载错误,并且子 VI 在这两个示例中都是可执行的VI和我自己的。但是,如果我打开自己的 VI,然后打开示例 VI,都会抛出错误。这意味着什么?
  • “重置”路径后是否保存 VI? LabVIEW存储相对或绝对路径,可能会混淆。当你打开VI(坏掉的)并且不修复它时,你可以在LabVIEW项目依赖列表中检查路径。还要确保在项目的“路径”部分(项目窗口中的 ctrl-e)DLL 列在正确的位置。可能是某些依赖项在您的 VI 尝试加载它们之前尝试从另一个位置加载 DLL。
  • 听起来名字被弄乱了,而且 DLL 的编写者在使用 __declspec(dllexport) 时没有使用 extern "C"。这个名字有很多@和其他杂项吗?
  • 不,这个名字似乎没有奇怪的杂项。我找到了一个临时解决方案,只需复制公司给我的 VI 并通过删除我需要的子 VI 并添加一些包装代码来编辑它,使其完全符合我的要求。我仍然想知道那个错误是从哪里来的......

标签: dll labview


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2014-03-11
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多