我正在做一个 ATL 项目。当我在 x64 系统下构建解决方案时,它不适用于 x86 架构,反之亦然。(我无法注册在不同架构中生成的 dll)。问题可能出在哪里?任何帮助,将不胜感激。
2 回答
您提到的症状不太可能与描述的完全一样。是否构建无关紧要Win32
,x64
重要的是构建时选择的目标平台。然后,
我无法注册在不同架构中生成的 dll
在 32 位 Windows 中,您无法使用x64
DLL,这是设计使然。但是,在 64 位系统中,您通常同时拥有 32 位和 64 位“环境”,您可以Win32
在那里使用和注册 DLL。如果不能,典型的原因是缺少强制依赖项(CRT 或其他 DLL,Dependency Walker可能会有所帮助)。您需要检查一下,因为 Q 没有这方面的相关信息。
除了注册之外,另一个可能的问题可能与 DLL 的“使用”有关。如果您“使用”来自您的 .NET 应用程序构建AnyCPU
平台的 DLL,并且该应用程序在 64 位 Windows 中作为 64 位进程运行,那么它将不会选择并使用您的 32 位 DLL。
[D:\命令] >键入 regsvr_32bit.bat @echo 关闭 rem "%SystemRoot%\Syswow64\regsvr32.exe" %s* 开始 "", regsvr_32bit.exe.lnk "%~f1" [D:\命令] > _
“.lnk”文件是一个普通的 Windows 快捷方式。
相反,您可以使用注释中显示的路径。
请注意,64 位可执行文件位于 [system32] 目录中,而 32 位可执行文件位于 [SysWOW64] 目录中。虽然这对于那些思考的人来说可能会很混乱,但对于那些不思考的人来说,这是 Just Works™ 的一种兼容性措施。因为我倾向于认为我为此挣扎了很长时间……
这是 regsvr32 的结果(例如):
[C:\Program Files (x86)\Microsoft Visual Studio 11.0] >转储/标题“%SystemRoot%\Syswow64\regsvr32.exe”| 找到“机器” 14C机(x86) 32位字机 [C:\Program Files (x86)\Microsoft Visual Studio 11.0] >垃圾箱 /headers "%SystemRoot%\system32\regsvr32.exe" | 找到“机器” 8664机(x64) [C:\Program Files (x86)\Microsoft Visual Studio 11.0] > _