无法注册DLL

时间:2013-02-28 14:41:51

标签: c++ dll atl dllregistration

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

2 个答案:

答案 0 :(得分:2)

您提到的症状不太可能完全如上所述。如果您构建Win32x64并不重要,那么在构建时选择的目标平台有什么关系。然后,

  

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

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

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

答案 1 :(得分:1)

[D:\commands]
> type regsvr_32bit.bat
@echo off
rem "%SystemRoot%\Syswow64\regsvr32.exe" %s*
start "", regsvr_32bit.exe.lnk "%~f1"

[D:\commands]
> _

“。lnk”文件是普通的Windows快捷方式。

相反,您可以使用评论中显示的路径。


请注意,64位可执行文件位于[system32]目录中,而32位可执行文件位于[SysWOW64]目录中。虽然对于那些思考的人来说这可能会让人感到困惑,但对于那些不思考的人来说,这是Just Works™的兼容性衡量标准。因为我很容易想到我在这方面挣扎了很长时间......

以下是regsvr32的结果(作为示例):

[C:\Program Files (x86)\Microsoft Visual Studio 11.0]
> dumpbin /headers "%SystemRoot%\Syswow64\regsvr32.exe" | find "machine"
             14C machine (x86)
                   32 bit word machine

[C:\Program Files (x86)\Microsoft Visual Studio 11.0]
> dumpbin /headers "%SystemRoot%\system32\regsvr32.exe" | find "machine"
            8664 machine (x64)

[C:\Program Files (x86)\Microsoft Visual Studio 11.0]
> _