11

我在 Windows 7 x64 下注册 *.dll 时遇到问题。

我尝试将 *.dll 放在 C:/Windows/System32 和 C:/Windows/SysWOW64 中,并尝试在提升的命令提示符下使用“regsvr32 xxxxx.dll”注册。我还尝试从单独的目录中注册它。它响应以下错误:

The module "xxxxx.dll" failed to load.
Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files.
The application has failed to start because its side-by-side configuration is incorrect. Please see the application event log or use the command-line sxstrace.exe tool for more detail.

事件日志注释:

Activation context generation failed for "C:\(path-to-dll)
Dependent Assembly
Microsoft.VC90.ATL,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" could not be found.
Please use sxstrace.exe for detailed diagnosis

注意我已经安装了 x86 和 x64 Microsoft Visual C++ 2010 Redistributables。

有趣的是,我尝试在我的工作 x64 Windows 7 笔记本电脑上注册相同的 *.dll 并按预期注册。我想这倾向于缺少某种 C++ 依赖项/与 ATL 相关的事实?

如果有人可以帮助我指出正确的方向或对此事有任何额外的了解;我将不胜感激。

问候。

4

5 回答 5

15

这几乎可以肯定是由于缺少依赖关系。使用Dependency Walker之类的工具来查找 DLL 所需的依赖项。或者,如果 DLL 由第三方提供,请阅读他们的文档,其中应指定所需的依赖项。

请注意,这Microsoft.VC90.ATL表示 MSVC 的版本 9,即 VS2008。因此,您需要安装 MSVC 2008 运行时来满足这种依赖性。看起来您错误地安装了 MSVC 2010 运行时。

最后,请不要将文件放入系统目录。它属于系统,不应由您修改。

于 2014-12-04T09:22:06.973 回答
4

从属程序集 Microsoft.VC90.ATL,processorArchitecture="x86"

这表明缺少 Visual C++ 运行时模块(请参阅Visual C++ Libraries as Shared Side-by-Side Assemblies)。它作为可再发行安装程序提供(可能是您需要的;x86变体),您需要在注册 DLL 之前安装它(这又取决于缺少的组件)。

于 2014-12-04T09:25:55.923 回答
2

失败还有另一个原因。我自己也遇到了这个。我正在使用不支持 Windows 7 的 API 方法例如PathCchRemoveFileSpec我必须更新到较旧的、已弃用的方法PathRemoveFileSpec. 我使用 Dependency Walker 来验证这是原因。Dependency Walker 有点说谎。如果您查看我的屏幕截图(如下),红色部分显示了实际问题 - 它无法在其拥有的 DLL 中解决的方法等 - 但蓝色部分显示实际上根本不是问题的 DLL(这些DLL 存在)。由于 Dependency Walker 太老了,它有点撒谎(它已经过时了,它有时会认为某些东西不可用),但通常,它也说实话......你只需要从顶部向下滚动一点像我一样的左窗格。自我提醒:下次请向下滚动。无论如何,一旦我放弃pathcch.h了,一切都在 7. 快乐编码。

在此处输入图像描述

于 2017-05-23T23:37:29.030 回答
0

我从这条错误消息中松了一口气。在我的二进制路径中,我有一个SPACE. 只是替换SPACEUNDERSCORE(_). 它对我有用。

于 2015-04-29T17:49:24.930 回答
0

因为我在通过 Regsvr32 注册 x.dll 时也遇到了同样的问题,所以可能的原因之一是 x.dll 可能是 unmaged dll。要在点网代码中使用 unmanged dll 导出功能,您必须使用Dllimport.

于 2017-05-12T05:28:58.727 回答