C++ REGSVR32:模块;xxxxx.dll“;无法加载。。。找不到依赖程序集

C++ REGSVR32:模块;xxxxx.dll“;无法加载。。。找不到依赖程序集,c++,windows,dll,regsvr32,dependency-walker,C++,Windows,Dll,Regsvr32,Dependency Walker,我在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 t

我在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

<强> N.B.< /强>我安装了X86和X64微软Visual C++ 2010重新分发表。

有趣的是,我试图在我的x64 Windows 7笔记本电脑上注册相同的*.dll,它按预期注册。我猜这倾向于某种C++依赖性缺失/ ATL相关的事实?

如果有人能帮我指出正确的方向,或者在这件事上提供更多的信息;我会非常感激的


问候。

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

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

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

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


这表示缺少VisualC++运行时模块(见)。它是可再发行的安装程序(可能是您需要的;

x86
变体),您需要在注册DLL之前安装它(这取决于缺少的组件)。

我从这个错误消息中解脱出来。在我的二进制路径中,我有一个
空格
。只需将
空格
替换为
下划线(33;)
。这对我很有效。

由于我在通过Regsvr32注册x.dll时也遇到了同样的问题,其中一个可能的原因是x.dll可能是未匹配的dll。
要在dot-net代码中使用unmanged dll export函数,必须使用
Dllimport

还有另一个失败的原因。我自己也遇到了这个我使用的API方法不支持Windows 7,我必须更新到旧版本。我用Dependency Walker验证了原因。依赖沃克有点撒谎。如果你看我的屏幕截图(如下),红色部分显示了实际的问题-它无法在DLL中解决的方法,等等-但蓝色部分显示的DLL实际上根本不是问题(这些DLL存在)。因为Dependency Walker太老了,所以它有点不对劲(它已经过时了,它认为有些东西有时不可用),但通常情况下,它也会告诉你真相……你只需要像我一样从左上角窗格向下滚动一点。自我提示:请下次向下滚动。不管怎样,一旦我抛弃了
pathch.h
,一切都在第7条上运行。快乐编码


感谢您推荐Dependency Walker。它确实是一个非常强大的工具。我并不打算把*.dll留在系统目录中,这只是在类似的文章中建议的解决方案;我自己也不敢相信。你是对的,这对我来说是个错误;不管出于什么原因,我假设版本9是VS2010而不是VS2008。安装VS2008 x86可再发行文件解决了我的问题。谢谢你的回答。系统目录是我的宠物臭虫熊。因此,我的小咆哮!!我不能说我不同意!我看过很多帖子,人们建议把随机的*.dll放进去。我也很讨厌。嗨,罗曼。谢谢你的回复。你提供的链接非常有用,我一定会把它保存起来,以备将来使用。干杯看看更新后的答案,我添加了下载链接,这应该很有帮助。你在哪里查找错误的?这在windows应用程序日志中吗?我在Windows事件查看器iirc@rennishJoseph中没有看到任何系统日志我不明白这会导致regsvr32失败的原因,除非在DLLRegisterServer或DLLUnregisterServer函数中使用了不受支持的API调用?@DaveInCaz iirc,如果DLL中的任何地方对Windows版本中尚不存在的新API函数存在依赖关系,它将以这种方式失败。我明白你的意思-在调用register/unregister之前,DLL将无法加载。这是有道理的,thanks@DaveInCazN P!