找不到指定的模块 - 64 位 dll

Posted

技术标签:

【中文标题】找不到指定的模块 - 64 位 dll【英文标题】:The specified module could not be found - 64 bit dll 【发布时间】:2009-06-04 09:08:12 【问题描述】:

当我尝试使用 VC++(VS2008) 编译以通过更改它编译的平台将 dll 转换为 x64 时,我有使用 Native C 编写的 32 位 dll。但是,当我尝试从也是“x64”平台的 C# 应用程序访问 dll 时,它无法加载 dll。我使用 Dllimport 将 dll 与我的应用程序链接起来。

我在 Vista 中使用的操作系统,但我无法从我的应用程序调用 at dll 函数,它说加载 dll 失败。

有什么办法可以解决这个问题。

期待您的帮助。

问候, 镓

【问题讨论】:

可能需要更多信息:您是否在 64 位 Vista 上运行?你能在你的 C# 应用程序中使用 32 位 dll 吗? 如果您在 64 位操作系统上运行它,请仔细检查您没有在 Build 选项卡中将 CPU 类型设置为 x86。 (可能是这种情况,如果您之前使用的是 32 位 DLL 和 64 位操作系统) 【参考方案1】:

尝试使用“dependency walker”工具(类似 ldd 的 win 工具,www.dependencywalker.com)来找出哪些链接与哪些链接。可能会有帮助。

【讨论】:

您还可以在 Visual Studio 命令提示符处使用“dumpbin /DEPENDENTS MyModule.dll”来查看依赖项。就我而言,丢失的是 VCRuntime140.dll。【参考方案2】:

我的猜测是依赖关系,您的新 DLL 可能缺少一些它需要的 64 位 DLL。

【讨论】:

当我使用dependency walker检查它没有显示这个dll的任何依赖。所以我猜不出这里有什么问题。 加载失败时会出现什么错误代码?尝试编写一个小的 c++x64 程序来加载 DLL,看看它是否有效,只是看看问题是在 DLL 中还是在某些 .NET 问题中。【参考方案3】:

检查您将不同版本 (x86/x64) 的 dll 构建到的位置。

最简单的做法是将 64 位 dll 的目标目录设置为目标文件夹的“x64”子目录。在您的 64 位解决方案配置中,将 C# 的目标目录也设置为“x64”目录。

这将确保每个平台的 exe 尝试加载正确的 dll。

【讨论】:

【参考方案4】:

感谢您的帮助。

当我将 dll 放在 C:\Windows\System32\ 下时,错误已解决。

谢谢, 镓

【讨论】:

【参考方案5】:

我曾经在这些方面遇到过问题。我有一个 C++ DLL,它充当硬件的接口,我需要从 C# 调用它。但是,如果没有插入硬件,则会导致 DllImport 调用失败。这是因为 DLL 初始化函数返回失败,所以 C# 只是说它无法加载 DLL,可能与 where 无关DLL 是。

检查当您在 C 代码中设置 DLL 时没有导致某种错误。

【讨论】:

以上是关于找不到指定的模块 - 64 位 dll的主要内容,如果未能解决你的问题,请参考以下文章

关于在64位系统上,使用APlayer,运行报错“找不到指定的模块”

FileNotFoundError:找不到模块“libvlc.dll”

asp.net提示“未能加载文件或程序集“XXXXXXXX.dll”或它的某一个依赖项。找不到指定的模块。”

import cx_Oracle ImportError: DLL load failed: 找不到指定的模块。

关于无法加载DLL"***.dll":找不到指定的模块(异常来自HRESULT:0x8007007E)问题的解决办法

模块“msvcp110.dll”已加载,但找不到入口点DllRegisterserver。 怎么办