The application was unable to start correctly (0xc000007b)
Asked Answered
E

20

181

I have a client/server app which I have been developing on a single PC. Now it needs two serial ports, so I borrowed a PC from a friend.

When I build my app and try to run or debug it (whether in the Delphi IDE or from Windows File manager), it errors "The application was unable to start correctly (0xc000007b)".

Googling doesn't bring up much, but seems to indicate that this is nothing Delphi specific and happens with other apps. It seems to be caused by calling into a 32 bit DLL from a 64 bit app or vice versa.

  • both PCs are Windows 7, 64 bit
  • both have Delphi Xe2 starter edition which can only handle 32 bits
  • The app runs fine on my PC, but not on my friend's
  • Other Delphi apps run just fine on both PCs

Can anyone give me a hint as to how to track this down?

Ellord answered 8/5, 2012 at 3:8 Comment(7)
On a side note, you can use com0com to install virtual serial ports on a single PC. Great for debugging and testing, just create 2 virtual ports and link them together in the config, then run your apps on each port so they can talk to each other.Casady
Did you check the Windows Events Log? Sometimes Windows provides more information regarding which DLL made the app fail.Investment
It will be a missing DLL I suspect, usually some utility, or even the memory manager.Arakawa
@Arakawa Missing DLL gives a different error: The program can't start because XXXX.dll is missing from your computer. Try reinstalling the program to fix this problem.Higginson
FWIW: Read this answer in another forum. It explains what could be going on.Greta
@DavidHeffernan That's not always true. Just now I encountered a situation where removing a GTK+ related dll generated this error with no information. Took an hour to figure it out because I made your assumption.Exultant
@snd This error is STATUS_INVALID_IMAGE_FORMAT. You don't get that when the system cannot find a DLL of that name. You get STATUS_INVALID_IMAGE_FORMAT when a DLL can be found, but it is corrupt, or has the wrong bitness.Higginson
F
147

Normally we get the 0xC000007B error-code (which means STATUS_INVALID_IMAGE_FORMAT), if:

  • If a 32-bit app tried to load a 64-bit DLL.
  • Or if a 64-bit app tried to load a 32-bit DLL.
  • Or if a 64-bit app tried to run on a 32-bit Windows.

To really know, I would suggest to test whether there is a problem between your application and its dependencies using dependency walker

Note that all you need to do is open your App using said tool, and issues appear as red log-entries at buttom of screen.

(At least, at time of writting, namely 2022)

Also, make sure you run the correct version of Dependency Walker, for example, the x86 version will display incorrect results when openning x64 binaries.

Fullmouthed answered 8/5, 2012 at 5:38 Comment(9)
based on the Windows Error Codes (google.de/…), this Error Code means: 0xC000007B STATUS_INVALID_IMAGE_FORMAT.Fullmouthed
Which is a good indication that the 32-bit app tried to load a 64-bit DLL.Casady
As a matter of fact, this Error Code Pdf File is an excellent source.Fullmouthed
+1 and the aswer. Thanks, dependancy walker saved the day. I replaced a 64 bit DLL with a 32 bit version and it works now.Ellord
Make sure you got the correct version of Dependency Walker. The x86 depends will display incorrect results for x64 binaries.Jonahjonas
mox's and @RemyLebeau's responses should be an answer on its own right.Lightner
thanks but I can't find problem in my log file.this is link of my log file please check it and tell me what I need for solving unreal 0xc000007b errorAnywheres
many thanks for pointing a way to find the error code. I got this same error (wind 8.1 x64) and then installed "Win64 OpenSSL v1.0.2o" , copied libeay32.dll and ssleay32.dll (I already copied pthreadVC2.dll). Finally installed "Microsoft Visual C++ 2010 Redistributable Package (x86)". Then again reinstalled "mosquitto-1.4.15a-install-win32" setup and solved my issue.Piliferous
@Fullmouthed - PDF link no longer works - use this one instead winprotocoldoc.blob.core.windows.net/productionwindowsarchives/…Introductory
H
56

A load time dependency could not be resolved. The easiest way to debug this is to use Dependency Walker. Use the Profile option to get diagnostics output of the load process. This will identify the point of failure and should guide you to a solution.

The most common cause of this error is trying to load a 64 bit DLL into a 32 bit process, or vice versa.

Higginson answered 8/5, 2012 at 7:9 Comment(1)
+1. Also note that you should run the 32 bit version of dependency walker, and ensure that all loaded DLLs are 32 bit. If you try to run the 64 bit version dependency walker, it will happily load the 64 bit DLLs, such as VCRedist, even if your also have their 32 bit versions.Expander
M
13

I tried all the things specified here and found yet another answer. I had to compile my application with 32-bit DLLs. I had built the libraries both in 32-bit and 64-bit but had my PATH set to 64-bit libraries. After I recompiled my application (with a number of changes in my code as well) I got this dreaded error and struggled for two days. Finally, after trying a number of other things, I changed my PATH to have the 32-bit DLLs before the 64-bit DLLs (they have the same names). And it worked. I am just adding it here for completeness.

Melanous answered 29/7, 2014 at 17:23 Comment(0)
M
12

It is a missing dll. Possibly, your dll that works with com ports have an unresolved dll dependence. You can use dependency walker and windows debugger. Check all of the mfc library, for example. Also, you can use nrCommlib - it is great components to work with com ports.

Malign answered 8/5, 2012 at 11:58 Comment(0)
K
9

It has been mentioned in earlier answers that using dependency walker is the way to go, in my case (my application keeps failing with the error code), dependency walker showed a few dll that are NOT relevant!

Finally figured out that I can run profiling by going to "profile" menu and it will run the application and stop at the exact dll that's cause the problem! I found out a 32bit dll was picked because of path and fixed it.

enter image description here

Kalimantan answered 25/7, 2016 at 20:10 Comment(0)
P
6

I experienced the same problem developing a client-server app using Microsoft Visual Studio 2012.

If you used Visual Studio to develop the app, you must make sure the new (i.e. the computer that the software was not developed on) has the appropriate Microsoft Visual C++ Redistributable Package. By appropriate, you need the right year and bit version (i.e. x86 for 32 bit and x64 for 64 bit) of the Visual C++ Redistributable Package.

The Visual C++ Redistributable Packages install run-time components that are required to run C++ applications built using Visual Studio.

Here is a link to the Visual C++ Redistributable for Visual Studio 2015 .

You can check what versions are installed by going to Control Panel -> Programs -> Programs and Features.

Here's how I got this error and fixed it:

1) I developed a 32 bit application using Visual Studio 2012 on my computer. Let's call my computer ComputerA.

2) I installed the .exe and the related files on a different computer we'll call ComputerB.

3) On ComputerB, I ran the .exe and got the error message.

4) On ComputerB, I looked at the Programs and Features and didn't see Visual C++ 2012 Redistributable (x64).

5) On ComputerB, I googled for Visual C++ 2012 Redistributable and selected and installed the x64 version.

6) On ComputerB, I ran the .exe on ComputerB and did not receive the error message.

Peadar answered 12/10, 2015 at 23:15 Comment(0)
P
5

I recently had an issue where I was developing an application (that used a serial port) and it worked on all the machines I tested it on but a few people were getting this error.

It turns out all the machines that the error happened on were running Win7 x64 and had NEVER ONCE been updated.

Running a Windows update fixed all of the machines in my particular case.

Posting answered 5/11, 2013 at 21:26 Comment(0)
A
3

Actually this error indicates to an invalid image format. However, why this is happening and what the error code usually means? Actually this could be appear when you are trying to run a program that is made for or intended to work with a 64 bit Windows operating system, but your computer is running on 32 bit Operating system.

Possible Reasons:

  • Microsoft Visual C++
  • Need to restart
  • DirectX
  • .NET Framework
  • Need to Re-Install
  • Need to Run the application as an administrator

Source: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/

Abutment answered 20/6, 2014 at 3:0 Comment(0)
K
2

This may be a case where debugging the debugger might be useful. Essentially if you follow the instructions here you can run two ide's and one will debug into the other. If you un your application in one, you can sometimes catch errors that you otherwise miss. Its worth a try.

Karlotta answered 8/5, 2012 at 7:30 Comment(1)
This is almost certainly an error reported by the loader and thus occurs before the process starts. Hence debugging would not be an option. Of course, I may be wrong in my diagnosis that the error is raised by the loader.Higginson
A
2

I have seen the error trying to run VC++ debug executable on a machine which did not have Visual C++ installed. Building a release version and using that fixed it.

Affix answered 16/12, 2013 at 21:12 Comment(0)
E
2

In my case the error occurred when I renamed a DLL after building it (using Visual Studio 2015), so that it fits the name expected by an executable, which depended on the DLL. After the renaming the list of exported symbols displayed by Dependency Walker was empty, and the said error message "The application was unable to start correctly" was displayed.

So it could be fixed by changing the output file name in the Visual Studio linker options.

Egyptology answered 10/8, 2016 at 12:27 Comment(0)
S
2

That can happen if for some reason a x86 resource is loaded from a x64 machine. To avoid that explicitly, add this preprocessor directive to stdafx.h (of course, in my example the problematic resource is Windows Common Controls 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
Stephainestephan answered 27/9, 2017 at 18:37 Comment(1)
The common controls are part of the operating system. The operating system knows, where to load the correct version from. This does nothing to solve the OP's issue. It doesn't even install a dependency. All it does is compile a manifest resource into the application to use version 6 of the common controls. The preprocessor conditional is also not needed. Simply set processorArchitecture='*', and that's all there is to it.Aegospotami
G
2

You can have this if you are trying to manifest your application that it has a dependancy on the Microsoft.Windows.Common-Controls assembly. You do this when you want to load Version 6 of the common controls library - so that visual styles are applied to common controls.

You probably followed Microsoft's original documentation way back from Windows XP days, and added the following to your application's manifest:

<!-- 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 is no longer the OS, and you're no longer a 32-bit application. In the intervening 17 years Microsoft updated their documentation; now it's time for you to update your manifest:

<!-- 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 has a lovely history of the Common Controls:

Geotropism answered 24/6, 2018 at 13:43 Comment(3)
"Windows XP is no longer the OS" made my day :DFavata
But I asked this question back in '12 - did Windows apps even have manifests then?Ellord
@Ellord This may or not be related to your issue. But with Stackoverflow being a combination of wiki and reddit for knowledge; it's a good tidbit to know for the exact error you reported. Having said that, Windows apps have had assembly manifests going back to Windows 2000; and starting with Windows XP you would no longer get the latest version of comctl32.dll unless your assembly manifest declared a dependency on it.Geotropism
K
2

The main problem, of course, is that a DLL file is missing, or, even more likely, corrupt. If this is the case, then I have some pretty good ideas (especially if you've downloaded and installed a DLL manually!)...

TLDR: Delete every manually copy/pasted DLL you've done, uninstall old redistributable installs, and reinstall new redistributables for both 32-bit and 64-bit installs.

What To Do

This solution of copying/pasting missing DLL's into system32, etc., used to work since I can remember in the 1990's, but it doesn't seem to work anymore (2020). So if you run into this problem recently, I suggest:

  • Within windows\system32 and windows\SysWOW64, delete all files that match ms*.dll, that the operating system will allow you delete as admin.
  • Uninstall all Visual C++ Redistributables that you have with Windows. This prevents the "You already have this!" dialogue showing up upon reinstall, as detailed in the next step when we re-install.
  • Reinstall the 2015-2019 Visual C++ Redistributable from a regularly available download site. If this does not work, download and install the others, but personally, the 2015-2019 covered everything for me. Regardless of your machine, install both x32 and x64 packages! (All Download Links: Collected VC++ Download Links; MSVCR120.dll Fix; MFC140U.dll Fix.)

How You Know It's Working

There's a lot of variation in coders experiencing this, so, the idea that there's one single, possible solution is often discarded, but let's be positive!

  • If deleting the matching ms*.dll files worked, then you will no longer get an error about error code 0xc000007b. Instead, you'll get a message about a missing .dll. This tells you that you're hitting the right code path!
  • If installing the redistributable works, then certain popular, DLL files should appear in the above-mentioned system32 and SysWO64 folders. For instance: MSVCR120.dll, MSVCR140.dll, MSVCR100.dll, MSVCP100.dll, MSVCP120.dll, MSVCP140.dll, and friends.

Last, Possible Best Chances

Sometimes things don't work according to plan (as we all in the Windows world know). You can also try the following!

  • Open the "Turn Windows Features on or off" tab in Windows (supported in Windows 8-10). Uncheck the .NET Framework installations. You'll see a small installation go by.
  • Restart the system. Go to the above feature again, recheck .NET Framework, and click "okay". If this works, you'll see a "installing and updating .NET framework" message that takes maybe a minute or so to go by. Once this is done, I recommend a reboot again.

Good luck!

Kung answered 12/12, 2020 at 2:36 Comment(0)
S
1

Just solved this problem for my personal project (thanks to Dries for that). For me it was because the project path was too long. After saving the .sln to a shorter path (C:/MyProjects) and compiling from there it ran without the error.

Sharla answered 31/3, 2014 at 13:50 Comment(1)
@jojodmo: actually, "For me it was because the project path was too long" seems to me to be a valid contribution to the bug hunt...Phyl
T
1

Also download and unzip "Dependencies" into same folder where you put the wget.exe from

http://gnuwin32.sourceforge.net/packages/wget.htm

You will then have some lib*.dll files as well as wget.exe in the same folder and it should work fine.

(I also answered here https://superuser.com/a/873531/146668 which I originally found.)

Toughie answered 4/2, 2015 at 12:26 Comment(0)
Z
1

I just ran into this issue. I searched for "C++" under my "Apps & Features" in Windows 10 control panel and noticed that some kind of update had just run a few days prior and installed VC++ Redistributable 2012-2017. The app that was running into the error message only required VC++ 2010. I uninstalled all of them and then reinstalled just 2010 x86/x64, and the error went away and the application functioned as expected.

Zerelda answered 7/6, 2017 at 11:57 Comment(0)
D
1

It is possible that you have multiple versions of the dll(s) on your system. You can search your system to find out. The issue may be solved by simply changing the order of the directories in your path. This was my issue. (Cannot run Qt Creator GUI outside of Qt. "The application was unable to start correctly (0xc000007b)" error)

Delacroix answered 27/2, 2019 at 17:33 Comment(0)
T
1

I ran into this issue when fetching code from my repository and compiling on a new machine. Copying over the entire repository and then compiling resulted in an executable which worked. Turns out a 32bit DLL accidentally wasn't checked in. As the people above state, use "Dependency Walker" to figure out where it goes wrong.

To make it more clear what to look for see the below screenshot, with in the background the exe trying to load the wrong DLL (notice the '64') resulting in "the application was unable to start correctly 0xc00007b" and in the foreground the exe which was simply copied over (which included the correct DLL).

Dependency Walker

Tuchman answered 4/6, 2021 at 8:59 Comment(0)
K
1

I came here when I was searching for: "golang Windows (0xc00007b)"

I have an app written in Golang, which uses iconv. It worked on my machine, but not in someone else's machine.

The first error was the missing DLL: libiconv-2.dll, so I guess they downloaded it on the internet but it was the 32 bit and not 64 bit version, so the 0xc00007b error appeared.

I searched the DLL on my system but I did not have success until I searched on MinGW 64 path which in my case is: C:\msys64\mingw64\bin

The solution was to distribute the DLL with the .exe, which was in the MinGW folder.

Karikaria answered 4/10, 2022 at 23:27 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.