为什么MSVC 2010 32bit项目链接到64bit kernel32.dll?

cdm*_*dmh 10 linker visual-studio-2010 32bit-64bit visual-c++

我有一个Win32(32位)DLL项目,它可以无错误地构建和链接.DLL无法加载到32位进程.使用DependencyWalker,我看到DLL是32位,但已经与KERNEL32,msvcr100d,WS2_32和msvcr100 64位库链接.

DependencyWalker也显示错误

Error: Modules with different CPU types were found.
Run Code Online (Sandbox Code Playgroud)

我已经对这个问题感到困惑了几个小时了,而且无法理解它 - 有没有其他人经历过这个问题,并找到了解决方案?

And*_*art 13

简答:使用Dependency Walker for x86 for x86 stuff.

长答案:最初我在MS Windows 7操作系统上使用了Dependency Walker for x64并遇到了障碍.然后我遵循MerickOWA关于改变搜索路径的建议(感谢MerickOWA).虽然我仍然有一些依赖导致"错误:找到了具有不同CPU类型的模块".

而不是弄清楚如何配置Dependency Walker以正确搜索奇怪的路径中的x86 DLL,例如"c:\ windows\winsxs\amd64_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_2b24536c71ed437a\GDIPLUS.DLL",我使用了Dependency Walker for x86.对我来说就像一个魅力!


Mer*_*OWA 6

Dependency Walker未使用与OS相同的搜索路径.它有自己的搜索路径来尝试查找DLL.您可以通过转到"选项 - >配置模块搜索订单..."来查看此信息.

不幸的是它的搜索路径不包括"C:\ Windows\SysWow64"(Kernel32.dll的32位版本的位置)

这就是Dependency Walker错误地认为您的应用程序正在将x64 DLL与x86应用程序混合的原因.

如果您修改搜索顺序以包含SysWow64并删除对System32目录的所有引用.这个错误应该消失.

在运行应用程序时检查Visual Studio调试器或WinDbg的输出窗口的更好方法.它将在加载时列出DLL的完整路径.