5

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

构建运行良好(win32 应用程序),但在运行时我收到错误“[...] has exited with code -1073741701 (0xc000007b)”。

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

这个项目的具体依赖是: 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?还是我犯了一个错误?

谢谢,

4

1 回答 1

8

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

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

下一步是根据可执行文件的体系结构(x86 或 x64)运行适当的依赖遍历器,可从www.dependencywalker.com获得。该工具应该告诉您它是否找到了对不同架构的搜索路径的依赖项。

如果dependency walker 发现问题,则修复方法是用相同架构的库替换有问题的库,或者根据搜索路径确保正确的库位于不正确的库之前。

于 2011-03-21T00:58:24.173 回答