【问题标题】:LoadLibrary project.dll failed. The specified module could not be foundLoadLibrary project.dll 失败。指定的模块无法找到
【发布时间】:2012-07-27 20:58:19
【问题描述】:

当我尝试注册我的 C++/ATL 项目的 32 位版本时

regsvr32 project.dll

我收到此错误:

LoadLibrary("project.dll") failed - The specified module could not be found

project.dll 是我在 Visual Studio 10 上使用 ATL 构建的 dll。

64 位版本注册正常。

我错过了什么?

【问题讨论】:

  • project.dll 在哪里?在与您调用此命令的位置相同的目录中?在 PATH 中?
  • 是的,它在同一个目录中(否则我会得到一个错误,说不存在这样的文件!)
  • 然后在dependency walker中打开dll,看看缺少哪些dll

标签: dll atl regsvr32


【解决方案1】:

我观察到了同样的错误,但解决方案没有安装可再发行组件。根据depends.exe,所有依赖的DLL都存在于系统1中。

在我的例子中,KERNEL32.DLL 的图标略带红色。 Depends.exe 没有提供太多解释,但四处挖掘发现系统上的 DLL 中缺少一个导入的函数。要查看导入的函数,请在树视图中选择依赖 DLL,然后在右侧面板中查找导入。按 PI 列排序以查看缺少导入的红色图标。

就我而言,缺少的功能是我悲伤的目标操作系统 Windows XP 上不存在的功能。由于我的程序不直接依赖这个函数,所以我可以在我的项目中使用#defineing 以下内容:

#define WINVER 0x0501
#define _WIN32_WINNT 0x0501

使用这些宏进行编译使得相关函数未在标头中声明,因此未在加载时导入。现在我可以使用regsvr32。这当然是一个非常具体(也很幸运)的案例。我不依赖该导入或任何其他较新的 API,因此我可以重新定位项目。如果它不是系统 DLL,我将需要找到一个较新的版本,这很容易导致需要更新依赖关系图的整个子树。或者更糟糕的是,如果我依赖于缺失的导入,则需要进行一些认真的重构。

总结起来,这个错误信息2可能是由以下问题引起的:

  1. 找不到或无法读取 DLL 文件。检查命令行。
  2. 未找到或无法读取某些依赖 DLL。
  3. 某些依赖 DLL 中缺少某些导入。如果这些是系统 DLL,则您可能针对的是错误的 Windows 版本。如果这些是非系统 DLL,您需要安装它们的较新版本及其所有依赖项。

1.:除了 IESHIMS.DLL 和 WER.DLL,这显然是这个旧工具中的一个错误。
2.:或者说真的,在特定系统上加载 DLL 的任何问题

【讨论】:

  • 虽然我不再从事那个项目并且没有能力检查这个问题,但这似乎是解决这个问题的正确方法。 +1 - 谢谢!
【解决方案2】:

在这种情况下,错误描述具有误导性。系统会找到您的 DLL (project.dll),但您的 DLL 的一个(或多个)依赖项可能会丢失。

【讨论】:

  • 使用 Dependency walker (dependencywalker.com) 检查您的 DLL(32 位版本)可能会有所帮助
  • 我试过了,它显示缺少一些 dll,但是当我下载这些 dll 并将它们添加到与项目 dll 相同的目录时 - 每次目录 walker 发现一组新的 dll 丢失
  • 其实有些图片是有子依赖的!在 Windows 加载程序可以启动(在您的情况下注册)应用程序之前,必须解决所有静态依赖项(直接和间接)。
  • 缺少哪些 DLL?您可以在原始问题上发布屏幕截图。
  • 我的开发环境掩盖了一个 dll 被发现。从 Windows 资源管理器运行它,它能够找到其余的依赖项。
【解决方案3】:

我刚刚安装了

Microsoft Visual C++ 2010 Redistributable Package 

现在我可以安装 dll。

虽然这可行,但我对此不太满意,因为我不想必须在客户端上安装这个包才能让我的 dll 由他们工作。

【讨论】:

  • 我刚刚注意到,在我使用的安装程序中有一个选项可以将此包作为先决条件包含在内 - 因此如果用户尚未安装该包,安装程序将去下载它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 2019-03-07
  • 2013-12-10
  • 2018-08-13
  • 2020-02-15
  • 1970-01-01
相关资源
最近更新 更多