2015-10-06 64 views
1

我在共享网络驱动器上有一个32位C++可执行文件。我在这个网络上有一堆64位Windows 7 Professional PC。其中一些运行我的程序很好,其他人产生“应用程序无法正确启动(0xc000007b)”错误。什么是452/0x1C4 CPU?

在阅读SO问题The application was unable to start correctly (0xc000007b)和其他喜欢它的人之后,我安装了Dependency Walker。

Dependency Walker发现2个DLL - MSVCP120D.Dll和MSVCR120D.DLL - 在依赖关系树中为64位。但是这两个DLL都与可执行文件位于同一个目录中。 (那么为什么程序在任何PC上都运行?!)运行带有/ headers选项的dumpbin证实它们是64位的。

这些DLL随Visual Studio 2013一起发布,所以我从那里复制了新的DLL到我的文件夹。 Dumpbin/headers将新的标识符识别为“1C4”,而不是像以前那样的x64。依赖Walker不再将它们标记为64位,但它仍然表示“找到了具有不同CPU类型的模块”,并且在详细讨论这些DLL的时候,它将它们标记为红色为“452”,而不是x86。该程序仍然在(0xc000007b)在同一台PC上失败。

什么是452(= hex 1C4)CPU,以及如何获得这些DLL的真正x86版本?

+0

从程序目录中删除DLL并运行[Visual C++ Redistributable Runtime程序包](http://www.microsoft.com/ en-us/download/details.aspx?id = 40784)来自MS网站。 –

+0

@ Ben Voigt好的,我做到了。可再发行组件包报告“安装成功”我删除了所有本地DLL用“ms”凝视 - 还有其他DLL专用于应用程序。我仍然在同一台机器上发生7B错误。确实,运行正常的机器都是过去安装Visual Studio的机器。 – user316117

+0

@Hans Passant - 对不起,但它不是一个错字。它确实说1C4和依赖性沃克说452(十六进制1C4十进制)。我有一个模糊的回忆,这是一个ARM处理器的代码,但我无法在网上找到任何确认,我不知道为什么应该在我的PC上有ARM DLL。 – user316117

回答

2

机器类型代码0x1C4是ARM。在this answer有一张桌子。

我一直未能在微软的网站上找到任何确认文件,但我可以确认Visual Studio 2013中的ARM二进制文件具有机器类型0x1C4。因为“ARM”在“x64”或“x86”之前排序,所以如果你在程序文件中搜索Visual Studio文件夹,他们是第一个找到的。我的猜测是你根本没有注意到有多个平台可用。)

相关问题