在x64系统上使用win32应用程序运行时错误(dll加载),同时编译0K

时间:2011-03-21 00:10:20

标签: c++ dll 64-bit binary-compatibility wow64

我最初使用VC9.0在win7 32位上设计了一个win32应用程序。 我最近升级到win7 64位,并尝试构建+执行以前的应用程序。

构建运行正常(win32应用程序),但在运行时我得到错误“[...]退出代码-1073741701(0xc000007b)。”

我猜这是加载64位版本[预期] 32位dll的结果。

此项目的特定依赖项是:   SDL.lib   SDLmain.lib   SDL_ttf.lib   opengl32.lib   glu32.lib   wininet.lib

SDL和SDL_ttf仅为32位版本。 我假设Visual Studio足够聪明,可以在我请求win32应用程序时获取\ syswow64中的opengl和glu lib文件。

可能是因为wininet?或者我犯了错误?

谢谢,

1 个答案:

答案 0 :(得分:8)

您似乎正在将64位DLL加载到32位进程中,反之亦然。以下是我如何跟踪有问题的DLL。

第一步是在可执行文件上运行dumpbin.exe(使用VS命令提示符在PATH上获取它),以确保架构符合您的期望:dumpbin.exe /headers foo.exe。在文件头输出中,您应该看到"机器"值" x86"或" x64"。在可选的标题输出中,您应该看到" PE32" (对于x86)或" PE32 +" (对于x64)。

下一步是运行适当的依赖性walker,可在www.dependencywalker.com获得,具体取决于可执行文件的体系结构(x86或x64)。此工具应该告诉您它是否找到了与不同架构的搜索路径的依赖关系。

如果依赖者walker发现问题,那么修复就是用相同体系结构的库替换有问题的库,或者确保在基于搜索路径的错误库之前找到正确的库。