Visual studio 2010 VC++;ATL DLL崩溃--可能与32/64位问题有关

Visual studio 2010 VC++;ATL DLL崩溃--可能与32/64位问题有关,visual-studio-2010,visual-c++,dll,32bit-64bit,atl,Visual Studio 2010,Visual C++,Dll,32bit 64bit,Atl,我创建的32位ATL dll有问题——每当我在Windows XP(32位)计算机上使用该dll时,它就会在没有任何警告的情况下崩溃。我认为这个问题与我编译dll的Windows版本有关,但我不确定。只是一段历史: 我最初是在WindowsXP(32位)上用VisualStudio2008开发dll的。此版本的dll在Windows XP(32位)和Windows 7(32位和64位)上运行良好。然后,我得到了一个带有Windows7(64位)和VisualStudio2010的新开发盒。我将我

我创建的32位ATL dll有问题——每当我在Windows XP(32位)计算机上使用该dll时,它就会在没有任何警告的情况下崩溃。我认为这个问题与我编译dll的Windows版本有关,但我不确定。只是一段历史:

我最初是在WindowsXP(32位)上用VisualStudio2008开发dll的。此版本的dll在Windows XP(32位)和Windows 7(32位和64位)上运行良好。然后,我得到了一个带有Windows7(64位)和VisualStudio2010的新开发盒。我将我的VS2008项目转换为VS2010,对其进行了编译,它在Windows7(32位和64位)机器上运行良好;然而,当我在WindowsXP(32位)上运行它时,它崩溃了

有趣的是,我成功地在XP机器上注册了dll,但当我运行dependency walker时,它说它丢失了一堆文件:

api-ms-win-core-console-l1-1-0.dll
api-ms-win-core-datetime-l1-1-0.dll
api-ms-win-core-debug-l1-1-0.dll
api-ms-win-core-delayload-l1-1-0.dll
api-ms-win-core-errorhandling-l1-1-0.dll
api-ms-win-core-FIELES-l1-1-0.dll
api-ms-win-core-file-l1-1-0.dll
api-ms-win-core-handle-l1-1-0.dll
api-ms-win-core-heap-l1-1-0.dll
api-ms-win-core-interlocked-l1-1-0.dll
api-ms-win-core-io-l1-1-0.dll
api-ms-win-core-libraryloader-l1-1-0.dll
…任何更多相同的

我将所有这些文件从我的开发机器复制到Windows XP框中,现在dependency walker告诉我:


错误:“c:\documents and settings\poibri01\desktop\distributable\WERUI.DLL”的并排配置信息包含错误。由于应用程序配置不正确,此应用程序无法启动。重新安装应用程序可能会解决此问题(14001)。
错误:找到具有不同CPU类型的模块。
警告:由于延迟负载相关模块中缺少导出功能,至少有一个模块具有未解析的导入。

我不知道从这里到哪里去。有人能帮我吗

编辑

  • 微软Visual C++ 2010可重分发包(X86)安装在WindowsXP机上。
  • 我将DLL编译为32位版本(不是调试)
  • 我认为这些DLL是正确的,所以它们不能在XP上工作。我怀疑清单文件中有特定于Windows 7的内容,或者您正在
    \u WIN32\u WINNT
    WINVER
    中指定最低版本,例如,请参阅

    要查看清单文件中的内容,请使用以下工具:


    谢谢,山楂……我想你找到解决办法了。在我的项目中,WINVER设置为0x0600(Windows Vista),因此我将其更改为0x0501(Windows Server 2003,Windows XP)。这是清单文件的输出:但是,当我在dll上运行dependency walker时,它仍然是指Windows 7 dll…你有什么想法吗?我忘了添加dll仍然在Windows XP上崩溃。我只是注释掉了target.h文件中的所有内容(WINVER宏在这里定义)并重新编译…仍然得到相同的Windows 7依赖项和崩溃。清单中没有明显的错误。我想知道是否不是您的dll依赖于这些Win7 dll,而是您依赖的另一个dll。在dependencywalker的树状图中,它是否显示这些是您自己的dll或其他dll的直接依赖关系?另外,你绝对确定它是32位二进制文件吗?
    mt -inputresource:mydll.dll;#1 -out extracted.manifest