找不到指定的模块 - 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: 找不到指定的模块。