1

我正在做一个 ATL 项目。当我在 x64 系统下构建解决方案时,它不适用于 x86 架构,反之亦然。(我无法注册在不同架构中生成的 dll)。问题可能出在哪里?任何帮助,将不胜感激。

4

2 回答 2

2

您提到的症状不太可能与描述的完全一样。是否构建无关紧要Win32x64重要的是构建时选择的目标平台。然后,

我无法注册在不同架构中生成的 dll

在 32 位 Windows 中,您无法使用x64DLL,这是设计使然。但是,在 64 位系统中,您通常同时拥有 32 位和 64 位“环境”,您可以Win32在那里使用和注册 DLL。如果不能,典型的原因是缺少强制依赖项(CRT 或其他 DLL,Dependency Walker可能会有所帮助)。您需要检查一下,因为 Q 没有这方面的相关信息。

除了注册之外,另一个可能的问题可能与 DLL 的“使用”有关。如果您“使用”来自您的 .NET 应用程序构建AnyCPU平台的 DLL,并且该应用程序在 64 位 Windows 中作为 64 位进程运行,那么它将不会选择并使用您的 32 位 DLL。

于 2013-02-28T18:28:43.803 回答
1
[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]
> _
于 2013-02-28T15:00:33.377 回答