我有一个客户端/服务器应用程序,我一直在一台PC上开发。现在它需要两个串口,所以我从朋友那里借了一台电脑。
当我构建我的应用程序并尝试运行或调试它时(无论是在Delphi IDE中还是从Windows文件管理器中),它出现错误“应用程序无法正确启动(0xc000007b)”。
谷歌搜索没有带来多少,但似乎表明这不是特定于Delphi的其他应用程序。它似乎是由64位应用程序调用32位DLL引起的,反之亦然。
任何人都可以给我一个提示,如何跟踪这个?
首先,我建议使用dependency walker测试应用程序与其依赖项之间是否存在问题
我看到错误尝试在没有安装Visual C ++的机器上运行VC ++调试可执行文件。构建发布版本并使用它修复它。
在我的情况下,当我在构建DLL(使用Visual Studio 2015)后重命名DLL时发生错误,因此它符合依赖于DLL的可执行文件所期望的名称。重命名后,Dependency Walker显示的导出符号列表为空,并显示错误消息“应用程序无法正确启动”。
因此可以通过更改Visual Studio链接器选项中的输出文件名来解决此问题。
如果您尝试向应用程序表明它对Microsoft.Windows.Common-Controls程序集具有依赖性,则可以使用此方法。当您要加载公共控件库的第6版时,可以执行此操作 - 以便将视觉样式应用于常用控件。
您可能从Windows XP时代开始遵循Microsoft的原始文档,并将以下内容添加到应用程序的清单中:
<!-- Dependancy on Common Controls version 6 -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>
Windows XP不再是操作系统,您不再是32位应用程序。在此间隔17年Microsoft updated their documentation;现在是时候更新清单了:
<!-- Dependancy on Common Controls version 6 -->
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"/>
</dependentAssembly>
</dependency>
Raymond Chen有着共同控制的可爱历史:
刚刚为我的个人项目解决了这个问题(感谢Dries)。对我来说,这是因为项目路径太长了。将.sln保存到较短的路径(C:/ MyProjects)并从那里编译后,它运行没有错误。
还可以下载“Dependencies”并将其解压缩到放置wget.exe的同一文件夹中
http://gnuwin32.sourceforge.net/packages/wget.htm
然后,您将在同一文件夹中有一些lib * .dll文件和wget.exe,它应该可以正常工作。
(我也回答了我最初找到的https://superuser.com/a/873531/146668。)
我刚遇到这个问题。我在Windows 10控制面板的“应用程序和功能”下搜索了“C ++”,并注意到某些更新刚刚运行几天并安装了VC ++ Redistributable 2012-2017。运行到错误消息中的应用程序只需要VC ++ 2010.我卸载了所有这些,然后重新安装了仅仅2010 x86 / x64,错误消失了,应用程序按预期运行。
如果由于某种原因从x64机器加载x86资源,就会发生这种情况。为了明确地避免这种情况,请将此预处理程序指令添加到stdafx.h(当然,在我的示例中,有问题的资源是Windows公共控件DLL。
#if defined(_WIN64)
#pragma comment(linker, "\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df'\"")
#endif
您的系统上可能有多个版本的dll(s)。您可以搜索您的系统以查找。只需更改路径中目录的顺序即可解决此问题。这是我的问题。 (Cannot run Qt Creator GUI outside of Qt. "The application was unable to start correctly (0xc000007b)" error)
无法解决加载时间依赖性。调试它的最简单方法是使用Dependency Walker。使用“配置文件”选项可获取加载过程的诊断输出。这将确定故障点,并指导您找到解决方案。
导致此错误的最常见原因是尝试将64位DLL加载到32位进程中,反之亦然。
这是一个失踪的DLL。可能,与com端口一起使用的dll具有未解析的dll依赖性。您可以使用依赖性walker和Windows调试器。例如,检查所有mfc库。此外,您可以使用nrCommlib - 它是使用COM端口的好组件。
我尝试了这里指定的所有东西,并找到了另一个答案。我不得不用32位DLL编译我的应用程序。我已经构建了32位和64位的库,但我的PATH
设置为64位库。在我重新编译我的应用程序之后(我的代码中也进行了一些更改)我遇到了这个可怕的错误并且挣扎了两天。最后,在尝试了许多其他的东西之后,我改变了我的PATH
以在64位DLL之前拥有32位DLL(它们具有相同的名称)。它奏效了。我只是在这里添加完整性。
我最近有一个问题,我正在开发一个应用程序(使用串行端口),它在我测试它的所有机器上工作,但有些人得到这个错误。
事实证明,发生错误的所有机器都在运行Win7 x64并且从未更新过。
运行Windows更新修复了我的特定情况下的所有计算机。
我在使用Microsoft Visual Studio 2012开发客户端 - 服务器应用程序时遇到了同样的问题。
如果您使用Visual Studio开发应用程序,则必须确保新的(即未在其上开发软件的计算机)具有相应的Microsoft Visual C ++ Redistributable Package。适当时,您需要Visual C ++ Redistributable Package的正确的年份和位版本(即32位的x86和64位的x64)。
Visual C ++ Redistributable Packages安装运行使用Visual Studio构建的C ++应用程序所需的运行时组件。
这是Visual C++ Redistributable for Visual Studio 2015 的链接。
您可以转到“控制面板” - >“程序” - >“程序和功能”来查看安装的版本。
这是我如何得到这个错误并修复它:
1)我在计算机上使用Visual Studio 2012开发了一个32位应用程序。我们打电话给我的电脑ComputerA。
2)我将.exe和相关文件安装在我们称之为ComputerB的另一台计算机上。
3)在计算机上,IN运行.exe并获取错误消息。
4)在ComputerB上,我查看了程序和功能,但没有看到Visual C ++ 2012 Redistributable(x64)。
5)在计算机上,在谷歌中进行Visual C ++ 2012 Redistributable并选择并安装x64版本。
6)在ComputerB上,我在ComputerB上运行.exe并没有收到错误消息。
实际上,此错误表示图像格式无效。但是,为什么会发生这种情况以及错误代码通常意味着什么?实际上,当您尝试运行为64位Windows操作系统制作或打算使用的程序时,可能会出现这种情况,但您的计算机是在32位操作系统上运行的。
可能的原因:
这可能是调试调试器可能有用的情况。基本上,如果你遵循instructions here,你可以运行两个ide,一个将调试到另一个。如果您将应用程序放在一个应用程序中,有时可以捕获您错过的错误。值得一试。