我正在开展一个ATL项目。当我在x64系统下构建我的解决方案时,它不适用于x86架构,反之亦然。 (我无法注册我在不同架构中生成的dll)。哪里可能是问题?任何帮助将不胜感激。
答案 0 :(得分:2)
您提到的症状不太可能完全如上所述。如果您构建Win32
或x64
并不重要,那么在构建时选择的目标平台有什么关系。然后,
我无法注册我在不同架构中生成的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] > _