J'ai une application client / serveur que j'ai développée sur un seul PC. Maintenant, il a besoin de deux ports série, j'ai donc emprunté un PC à un ami.
Lorsque je crée mon application et que je tente de l'exécuter ou de la déboguer (que ce soit dans l'EDI Delphi ou à partir du gestionnaire de fichiers Windows), le message d'erreur «L'application n'a pas pu démarrer correctement (0xc000007b)» s'affiche.
Googler n'apporte pas grand-chose, mais semble indiquer que ce n'est rien de spécifique à Delphi et que cela se produit avec d'autres applications. Cela semble être causé par l'appel à une DLL 32 bits à partir d'une application 64 bits ou vice versa.
- les deux PC sont Windows 7, 64 bits
- les deux ont une édition de démarrage Delphi Xe2 qui ne peut gérer que 32 bits
- L'application fonctionne bien sur mon PC, mais pas sur celui de mon ami
- D'autres applications Delphi fonctionnent très bien sur les deux PC
Quelqu'un peut-il me donner un indice sur la façon de retracer cela?
STATUS_INVALID_IMAGE_FORMAT
. Vous n'obtenez pas cela lorsque le système ne peut pas trouver une DLL de ce nom. Vous obtenezSTATUS_INVALID_IMAGE_FORMAT
quand une DLL peut être trouvée, mais elle est corrompue ou a le mauvais bitness.Réponses:
Pour commencer, je suggérerais de tester s'il y a un problème entre votre application et ses dépendances en utilisant le walker de dépendance
la source
Une dépendance de temps de chargement n'a pas pu être résolue. La manière la plus simple de déboguer ceci est d'utiliser Dependency Walker . Utilisez l'option Profil pour obtenir la sortie de diagnostic du processus de chargement. Cela identifiera le point de défaillance et devrait vous guider vers une solution.
La cause la plus courante de cette erreur est d'essayer de charger une DLL 64 bits dans un processus 32 bits, ou vice versa.
la source
C'est une DLL manquante. Il est possible que votre dll qui fonctionne avec les ports com ait une dépendance dll non résolue. Vous pouvez utiliser le marcheur de dépendances et le débogueur Windows. Vérifiez toute la bibliothèque mfc, par exemple. En outre, vous pouvez utiliser nrCommlib - ce sont d'excellents composants pour travailler avec les ports com.
la source
J'ai essayé toutes les choses spécifiées ici et j'ai trouvé une autre réponse. J'ai dû compiler mon application avec des DLL 32 bits. J'avais construit les bibliothèques à la fois en 32 bits et 64 bits, mais j'avais mon
PATH
ensemble de bibliothèques 64 bits. Après avoir recompilé mon application (avec un certain nombre de changements dans mon code également), j'ai eu cette erreur redoutée et j'ai lutté pendant deux jours. Enfin, après avoir essayé un certain nombre d'autres choses, j'ai changé monPATH
pour avoir les DLL 32 bits avant les DLL 64 bits (elles ont les mêmes noms). Et ça a marché. Je l'ajoute simplement ici par souci d'exhaustivité.la source
Il a été mentionné dans les réponses précédentes que l'utilisation de dependency walker est la voie à suivre, dans mon cas (mon application échoue toujours avec le code d'erreur), dependency walker a montré quelques dll qui ne sont PAS pertinentes!
Enfin compris que je peux exécuter le profilage en allant dans le menu "profil" et il exécutera l'application et s'arrêtera à la DLL exacte qui est à l'origine du problème! J'ai découvert qu'une dll 32 bits avait été choisie à cause du chemin et je l'ai corrigée.
la source
J'ai récemment eu un problème où je développais une application (qui utilisait un port série) et cela fonctionnait sur toutes les machines sur lesquelles je l'ai testé, mais quelques personnes recevaient cette erreur.
Il s'avère que toutes les machines sur lesquelles l'erreur s'est produite exécutaient Win7 x64 et n'avaient JAMAIS été mis à jour.
L'exécution d'une mise à jour Windows a corrigé toutes les machines dans mon cas particulier.
la source
J'ai rencontré le même problème lors du développement d'une application client-serveur à l'aide de Microsoft Visual Studio 2012.
Si vous avez utilisé Visual Studio pour développer l'application, vous devez vous assurer que le nouveau (c'est-à-dire l'ordinateur sur lequel le logiciel n'a pas été développé) dispose du package redistribuable Microsoft Visual C ++ approprié. Le cas échéant, vous avez besoin de la bonne année et de la bonne version binaire (c'est-à-dire x86 pour 32 bits et x64 pour 64 bits) du package redistribuable Visual C ++.
Voici un lien vers le redistribuable Visual C ++ pour Visual Studio 2015 .
Vous pouvez vérifier quelles versions sont installées en allant dans Panneau de configuration -> Programmes -> Programmes et fonctionnalités.
Voici comment j'ai eu cette erreur et l'ai corrigée:
1) J'ai développé une application 32 bits à l'aide de Visual Studio 2012 sur mon ordinateur. Appelons mon ordinateur ComputerA.
2) J'ai installé le .exe et les fichiers associés sur un autre ordinateur que nous appellerons ComputerB.
3) Sur ComputerB, j'ai exécuté le .exe et j'ai reçu le message d'erreur.
4) Sur ComputerB, j'ai regardé les programmes et les fonctionnalités et je n'ai pas vu Visual C ++ 2012 Redistributable (x64).
5) Sur ComputerB, j'ai cherché sur Google Visual C ++ 2012 Redistributable et sélectionné et installé la version x64.
6) Sur ComputerB, j'ai exécuté le .exe sur ComputerB et je n'ai pas reçu le message d'erreur.
la source
En fait, cette erreur indique un format d'image non valide. Cependant, pourquoi cela se produit-il et que signifie généralement le code d'erreur? En fait, cela peut apparaître lorsque vous essayez d'exécuter un programme conçu pour ou destiné à fonctionner avec un système d'exploitation Windows 64 bits, mais que votre ordinateur fonctionne sur un système d'exploitation 32 bits.
Raisons possibles:
Source: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/
la source
Cela peut être un cas où le débogage du débogueur peut être utile. Essentiellement, si vous suivez les instructions ici, vous pouvez exécuter deux ide et l'un déboguera dans l'autre. Si vous désignez votre application en une seule, vous pouvez parfois détecter des erreurs que vous auriez autrement manquées. Ça vaut la peine d'essayer.
la source
J'ai vu l'erreur en essayant d'exécuter l'exécutable de débogage VC ++ sur une machine sur laquelle Visual C ++ n'était pas installé. Construire une version finale et l'utiliser corrigé.
la source
Dans mon cas, l'erreur s'est produite lorsque j'ai renommé une DLL après sa création (à l'aide de Visual Studio 2015), afin qu'elle corresponde au nom attendu par un exécutable, qui dépendait de la DLL. Après le changement de nom, la liste des symboles exportés affichée par Dependency Walker était vide et le message d'erreur "L'application n'a pas pu démarrer correctement" était affiché.
Il peut donc être résolu en modifiant le nom du fichier de sortie dans les options de l'éditeur de liens Visual Studio.
la source
Vous pouvez avoir cela si vous essayez de montrer à votre application qu'elle a une dépendance sur l' assembly Microsoft.Windows.Common-Controls . Vous effectuez cette opération lorsque vous souhaitez charger la version 6 de la bibliothèque de contrôles communs afin que les styles visuels soient appliqués aux contrôles communs.
Vous avez probablement suivi la documentation originale de Microsoft depuis l'époque de Windows XP et ajouté ce qui suit au manifeste de votre application:
Windows XP n'est plus le système d'exploitation et vous n'êtes plus une application 32 bits. Au cours des 17 années écoulées, Microsoft a mis à jour sa documentation ; il est maintenant temps pour vous de mettre à jour votre manifeste:
Raymond Chen a une belle histoire des commandes communes:
la source
Je viens de résoudre ce problème pour mon projet personnel (merci à Dries pour cela). Pour moi, c'était parce que le chemin du projet était trop long. Après avoir enregistré le .sln dans un chemin plus court (C: / MyProjects) et compilé à partir de là, il s'est exécuté sans l'erreur.
la source
Téléchargez et décompressez également "Dependencies" dans le même dossier où vous avez placé le fichier wget.exe
http://gnuwin32.sourceforge.net/packages/wget.htm
Vous aurez alors des fichiers lib * .dll ainsi que wget.exe dans le même dossier et cela devrait fonctionner correctement.
(J'ai également répondu ici https://superuser.com/a/873531/146668 que j'ai trouvé à l'origine.)
la source
Je viens de rencontrer ce problème. J'ai recherché "C ++" sous mes "Applications et fonctionnalités" dans le panneau de configuration de Windows 10 et j'ai remarqué qu'une sorte de mise à jour venait de s'exécuter quelques jours auparavant et avait installé VC ++ Redistributable 2012-2017. L'application qui fonctionnait dans le message d'erreur ne nécessitait que VC ++ 2010. Je les ai tous désinstallés, puis réinstallé juste 2010 x86 / x64, et l'erreur a disparu et l'application a fonctionné comme prévu.
la source
Cela peut arriver si, pour une raison quelconque, une ressource x86 est chargée à partir d'une machine x64. Pour éviter cela explicitement, ajoutez cette directive de préprocesseur à stdafx.h (bien sûr, dans mon exemple, la ressource problématique est la DLL Windows Common Controls.
la source
processorArchitecture='*'
, et c'est tout ce qu'il y a à faire.Il est possible que vous ayez plusieurs versions de la ou des DLL sur votre système. Vous pouvez rechercher votre système pour le découvrir. Le problème peut être résolu en modifiant simplement l'ordre des répertoires dans votre chemin. C'était mon problème. ( Impossible d'exécuter l'interface graphique de Qt Creator en dehors de Qt. Erreur "L'application n'a pas pu démarrer correctement (0xc000007b)" )
la source