应用程序无法正确启动(0xc000007b)

Maw*_*awg 153 windows delphi 64-bit

我有一个客户端/服务器应用程序,我一直在一台PC上开发.现在它需要两个串口,所以我从朋友那里借了一台电脑.

当我构建我的应用程序并尝试运行或调试它时(无论是在Delphi IDE中还是从Windows文件管理器中),它出现错误"应用程序无法正确启动(0xc000007b)".

谷歌搜索没有带来多少,但似乎表明这不是特定于Delphi的其他应用程序.它似乎是由64位应用程序调用32位DLL引起的,反之亦然.

  • 两台PC都是Windows 7,64位
  • 两者都有Delphi Xe2入门版,只能处理32位
  • 该应用程序在我的电脑上正常运行,但不在我朋友的电脑上运行
  • 其他Delphi应用程序在两台PC上运行良好

任何人都可以给我一个提示,如何跟踪这个?

mox*_*mox 129

首先,我建议使用dependency walker测试应用程序与其依赖项之间是否存在问题

  • 这是一个很好的迹象表明32位应用程序试图加载64位DLL. (90认同)
  • 基于Windows错误代码(http://www.google.de/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&ved=0CIYBEBYwAA&url=http%3A%2F%2Fdownload.microsoft.com%2Fdownload %2F9 2F5%%%2FE 2F95EF66AF-9026-4BB0-A41D-A4F81802D92C%2F%5BMS-ERREF%5D.pdf&EI = 17GoT53mCK_R4QSGm6WRCQ&USG = AFQjCNHu2-WVJpA7ViG5e-GAne_gCH9Rzw&SIG2 = f1N9anRoFy8qDuth62oK7g),此错误代码表示:0xC000007B STATUS_INVALID_IMAGE_FORMAT. (29认同)
  • 确保你有正确版本的Dependency Walker.x86依赖项将显示x64二进制文件的错误结果. (5认同)
  • 事实上,这个错误代码Pdf文件是一个很好的来源. (4认同)
  • +1和aswer.谢谢,依赖步行者救了一天.我用32位版本替换了64位DLL,现在可以正常工作了. (4认同)
  • mox和@RemyLebeau的回复应该是正确的答案。 (2认同)
  • @mox - PDF 链接不再有效 - 请改用此链接 https://winprotocoldoc.blob.core.windows.net/developmentwindowsarchives/MS-ERREF/%5bMS-ERREF%5d.pdf (2认同)

Dav*_*nan 52

无法解决加载时间依赖性.调试它的最简单方法是使用Dependency Walker.使用"配置文件"选项可获取加载过程的诊断输出.这将确定故障点,并指导您找到解决方案.

导致此错误的最常见原因是尝试将64位DLL加载到32位进程中,反之亦然.

  • +1。另请注意,您应该运行 32 位版本的依赖项walker,并确保所有加载的 DLL 都是 32 位的。如果您尝试运行 64 位版本的依赖项walker,它会很乐意加载 64 位 DLL,例如 VCRedist,即使您也有它们的 32 位版本。 (3认同)

小智 12

这是一个失踪的DLL.可能,与com端口一起使用的dll具有未解析的dll依赖性.您可以使用依赖性walker和Windows调试器.例如,检查所有mfc库.此外,您可以使用nrCommlib - 它是使用COM端口的好组件.


unx*_*nut 12

我尝试了这里指定的所有东西,并找到了另一个答案.我不得不用32位DLL编译我的应用程序.我已经构建了32位和64 PATH位的库,但我已经设置了64位库.在我重新编译我的应用程序之后(我的代码中也进行了一些更改)我遇到了这个可怕的错误并且挣扎了两天.最后,在尝试了许多其他的东西之后,我改变了我PATH在64位DLL之前拥有32位DLL(它们具有相同的名称).它奏效了.我只是在这里添加完整性.


pkt*_*der 8

在前面的答案中已经提到过,使用依赖性walker是可行的方法,在我的情况下(我的应用程序一直在使用错误代码失败),依赖者walker显示了一些不相关的dll!

最后发现我可以通过转到"配置文件"菜单运行分析,它将运行应用程序并停在导致问题的确切dll!我发现一个32位的dll因路径而被修复并修复了它.

在此输入图像描述


use*_*622 6

我在使用 Microsoft Visual Studio 2012 开发客户端-服务器应用程序时遇到了同样的问题。

如果您使用 Visual Studio 开发应用程序,则必须确保新的(即未开发该软件的计算机)具有适当的 Microsoft Visual C++ Redistributable Package。根据适当的情况,您需要 Visual C++ Redistributable Package 的正确年份和位版本(即 x86 用于 32 位,x64 用于 64 位)。

Visual C++ Redistributable Packages 安装运行使用 Visual Studio 构建的 C++ 应用程序所需的运行时组件。

这是Visual Studio 2015Visual C++ Redistributable的链接。

您可以通过转到控制面板 -> 程序 -> 程序和功能来检查安装了哪些版本。

这是我得到这个错误并修复它的方法:

1) 我在我的电脑上使用 Visual Studio 2012 开发了一个 32 位应用程序。让我们称我的计算机为 ComputerA。

2) 我将 .exe 和相关文件安装在我们称为 ComputerB 的另一台计算机上。

3) 在 ComputerB 上,我运行 .exe 并收到错误消息。

4) 在 ComputerB 上,我查看了程序和功能,但没有看到 Visual C++ 2012 Redistributable (x64)。

5) 在 ComputerB 上,我搜索了 Visual C++ 2012 Redistributable 并选择并安装了 x64 版本。

6) 在ComputerB 上,我在ComputerB 上运行.exe 并没有收到错误消息。


mit*_*h36 5

我最近有一个问题,我正在开发一个应用程序(使用串行端口),它在我测试它的所有机器上工作,但有些人得到这个错误.

事实证明,发生错误的所有机器都在运行Win7 x64并且从未更新过.

运行Windows更新修复了我的特定情况下的所有计算机.