【问题标题】:The specified module could not be found - 64 bit dll找不到指定的模块 - 64 位 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 位操作系统)

标签: c# c++ c dll dllimport


【解决方案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 时没有导致某种错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        • 2017-07-28
        • 2012-11-08
        • 1970-01-01
        相关资源
        最近更新 更多