I got this error the other day:
error: LDR: LdrpWalkImportDescriptor() failed to probe QtCored4.dll for its manifest, ntstatus 0xc0150002
I did some googling, and here's what I found out:
- The
error may be a red herring, it's really a SideBySide DLL error. Look
in the Event Viewer (see Control Panel, Administrative Tools) for the
real error [Mombu, MSDN Social]. It turned out the Microsoft.VC80.DebugCRT DLL could not be found.
- Usually occurs because of missing DLLs, or DLLs with the
incorrect version number (as specified in the DLL's manifest) on the
deployment machine.
- Solutions:
- Recompile the offending DLL(s) [Nabble, Bytes]
- Recompile
the offending DLL(s), but make sure the DLL project is configured to
embed the manifest in the DLL. Have a look at the "dependentAssembly" tag in
the generated YourDLLName.intermediate.manifest file. It must be the
same as the "dependentAssembly" version in the manifest file generated
for your EXE project. Make sure the same service packs are installed (i.e. same
msvc) on the machine that built the DLL and the one that built the EXE [Trolltech Lists]
- Recompile the offending DLL(s), or download and install MSVC Redist SP1 [OpenCV Wiki]
- FAQ on manifests [CodeGuru]
Here's
what worked for me: I checked the manifest file in the DLL that caused the error -- QtCore4d.dll in this example -- and noticed it required the Microsoft.VC80.DebugCRT DLL of a certain version. A colleague
of mine compiled the DLL,
so I had easy access to the manifest since an "intermediate" copy is
stored in the DLL project's build directory. If that wasn't the case, I
could use
mt.exe
from Microsoft to extract it from the DLL. I then inspected the manifest generated by Visual Studio
when I compiled my EXE project. It turned out my EXE manifest
required a version of the Microsoft.VC80.DebugCRT DLL that was older
than that required by the QtCore4d.dll DLL, which means my machine had older
DLLs than that required by QtCored4.dll. I simply applied a few Microsoft Visual Studio
updates, recompiled my EXE project (not the DLL project), and the newly
generated manifest showed the dependent DLL (Microsoft.VC80.DebugCRT) version to be the same as
that in the QtCored4.dll manifest. Everything worked fine afterwards.