我最初使用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?或者我犯了错误?
谢谢,
答案 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发现问题,那么修复就是用相同体系结构的库替换有问题的库,或者确保在基于搜索路径的错误库之前找到正确的库。