9

当我尝试注册我的 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 位版本注册良好。

我错过了什么?

4

3 回答 3

9

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

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

看到缺少的导入

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

#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 的任何问题

于 2014-09-30T08:28:21.110 回答
5

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

于 2012-07-30T07:59:21.063 回答
2

我刚安装

Microsoft Visual C++ 2010 Redistributable Package 

现在我可以安装dll了。

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

于 2012-07-30T09:01:43.440 回答