Tengo una aplicación cliente / servidor que he estado desarrollando en una sola PC. Ahora necesita dos puertos seriales, así que tomé prestada una PC de un amigo.
Cuando construyo mi aplicación e intento ejecutarla o depurarla (ya sea en Delphi IDE o desde el Administrador de archivos de Windows), se produce el error "La aplicación no pudo iniciarse correctamente (0xc000007b)".
Buscar en Google no muestra mucho, pero parece indicar que esto no es específico de Delphi y sucede con otras aplicaciones. Parece ser causado al llamar a un archivo DLL de 32 bits desde una aplicación de 64 bits o viceversa.
- ambas PC son Windows 7, 64 bit
- ambos tienen la edición de inicio Delphi Xe2 que solo puede manejar 32 bits
- La aplicación funciona bien en mi PC, pero no en la de mi amigo
- Otras aplicaciones de Delphi funcionan bien en ambas PC
¿Alguien puede darme una pista sobre cómo rastrear esto?
STATUS_INVALID_IMAGE_FORMAT
. No se obtiene eso cuando el sistema no puede encontrar una DLL con ese nombre. Se obtieneSTATUS_INVALID_IMAGE_FORMAT
cuando se puede encontrar una DLL, pero está dañada o tiene la bitness incorrecta.Respuestas:
Para comenzar, sugeriría probar si hay un problema entre su aplicación y sus dependencias usando el caminante de dependencias
fuente
No se pudo resolver una dependencia del tiempo de carga. La forma más fácil de depurar esto es usar Dependency Walker . Use la opción Perfil para obtener resultados de diagnóstico del proceso de carga. Esto identificará el punto de falla y debería guiarlo hacia una solución.
La causa más común de este error es intentar cargar una DLL de 64 bits en un proceso de 32 bits, o viceversa.
fuente
Es un dll faltante. Posiblemente, su dll que funciona con puertos com tiene una dependencia dll no resuelta. Puede usar el caminante de dependencia y el depurador de Windows. Verifique toda la biblioteca mfc, por ejemplo. Además, puede usar nrCommlib: son excelentes componentes para trabajar con puertos com.
fuente
Intenté todas las cosas especificadas aquí y encontré otra respuesta. Tuve que compilar mi aplicación con archivos DLL de 32 bits. Había construido las bibliotecas tanto en 32 bits como en 64 bits, pero tenía mi
PATH
conjunto en bibliotecas de 64 bits. Después de volver a compilar mi aplicación (con una serie de cambios en mi código también) recibí este temido error y luché durante dos días. Finalmente, después de probar varias otras cosas, cambié miPATH
para tener las DLL de 32 bits antes que las DLL de 64 bits (tienen los mismos nombres). Y funcionó. Solo lo estoy agregando aquí para completar.fuente
Se ha mencionado en respuestas anteriores que usar el caminante de dependencia es el camino a seguir, en mi caso (mi aplicación sigue fallando con el código de error), ¡el caminante de dependencia mostró algunos dll que NO son relevantes!
Finalmente descubrí que puedo ejecutar la creación de perfiles yendo al menú "perfil" y ejecutará la aplicación y se detendrá en el dll exacto que causa el problema. Descubrí que se eligió un dll de 32 bits debido a la ruta y lo arreglé.
fuente
Recientemente tuve un problema en el que estaba desarrollando una aplicación (que usaba un puerto serie) y funcionaba en todas las máquinas en las que lo probé, pero algunas personas estaban recibiendo este error.
Resulta que todas las máquinas en las que ocurrió el error estaban ejecutando Win7 x64 y NUNCA se habían actualizado UNA VEZ.
La ejecución de una actualización de Windows solucionó todas las máquinas en mi caso particular.
fuente
Experimenté el mismo problema al desarrollar una aplicación cliente-servidor con Microsoft Visual Studio 2012.
Si usó Visual Studio para desarrollar la aplicación, debe asegurarse de que la nueva (es decir, la computadora en la que no se desarrolló el software) tenga el paquete redistribuible de Microsoft Visual C ++ apropiado. Según corresponda, necesita la versión correcta de año y bit (es decir, x86 para 32 bit y x64 para 64 bit) del paquete redistribuible de Visual C ++.
Aquí hay un enlace a Visual C ++ Redistributable para Visual Studio 2015 .
Puede verificar qué versiones están instaladas en Panel de control -> Programas -> Programas y características.
Así es como obtuve este error y lo solucioné:
1) Desarrollé una aplicación de 32 bits usando Visual Studio 2012 en mi computadora. Llamemos a mi computadora ComputerA.
2) Instalé el .exe y los archivos relacionados en una computadora diferente que llamaremos ComputerB.
3) En ComputerB, ejecuté el .exe y recibí el mensaje de error.
4) En ComputerB, miré los Programas y Características y no vi Visual C ++ 2012 Redistributable (x64).
5) En ComputerB, busqué en Google Redistribuible de Visual C ++ 2012 y seleccioné e instalé la versión x64.
6) En ComputerB, ejecuté el .exe en ComputerB y no recibí el mensaje de error.
fuente
En realidad, este error indica un formato de imagen no válido. Sin embargo, ¿por qué sucede esto y qué significa generalmente el código de error? En realidad, esto podría aparecer cuando intentas ejecutar un programa que está diseñado o está destinado a funcionar con un sistema operativo Windows de 64 bits, pero tu computadora está funcionando con un sistema operativo de 32 bits.
Posibles razones:
Fuente: http://www.solveinweb.com/solved-the-application-was-unable-to-start-correctly-0xc000007b-click-ok-to-close-the-application/
fuente
Este puede ser un caso en el que la depuración del depurador puede ser útil. Esencialmente, si sigue las instrucciones aquí , puede ejecutar dos ide y uno se depurará en el otro. Si abre su aplicación en una, a veces puede detectar errores que de otro modo se perderían. Vale la pena intentarlo.
fuente
He visto el error al intentar ejecutar el ejecutable de depuración de VC ++ en una máquina que no tenía instalado Visual C ++. Construir una versión de lanzamiento y usarla lo arregló.
fuente
En mi caso, el error ocurrió cuando cambié el nombre de una DLL después de compilarla (usando Visual Studio 2015), de modo que se ajusta al nombre esperado por un ejecutable, que dependía de la DLL. Después del cambio de nombre, la lista de símbolos exportados que muestra Dependency Walker estaba vacía y se mostraba el mensaje de error "La aplicación no pudo iniciarse correctamente".
Por lo tanto, podría solucionarse cambiando el nombre del archivo de salida en las opciones del vinculador de Visual Studio.
fuente
Puede tener esto si está intentando manifestar que su aplicación depende del ensamblado Microsoft.Windows.Common-Controls . Lo hace cuando desea cargar la Versión 6 de la biblioteca de controles comunes, de modo que los estilos visuales se apliquen a los controles comunes.
Probablemente siguió la documentación original de Microsoft desde los días de Windows XP y agregó lo siguiente al manifiesto de su aplicación:
Windows XP ya no es el sistema operativo, y ya no eres una aplicación de 32 bits. En los 17 años transcurridos, Microsoft actualizó su documentación ; ahora es tiempo de que actualices tu manifiesto:
Raymond Chen tiene una hermosa historia de los controles comunes:
fuente
Acabo de resolver este problema para mi proyecto personal (gracias a Dries por eso). Para mí fue porque la ruta del proyecto era demasiado larga. Después de guardar el .sln en una ruta más corta (C: / MyProjects) y compilar desde allí, se ejecutó sin el error.
fuente
También descargue y descomprima "Dependencias" en la misma carpeta donde coloca el wget.exe de
http://gnuwin32.sourceforge.net/packages/wget.htm
A continuación, tendrá algunos archivos lib * .dll y wget.exe en la misma carpeta y debería funcionar bien.
(También respondí aquí https://superuser.com/a/873531/146668 que encontré originalmente).
fuente
Acabo de encontrarme con este problema. Busqué "C ++" en mis "Aplicaciones y características" en el panel de control de Windows 10 y noté que algún tipo de actualización acababa de ejecutarse unos días antes e instalé VC ++ Redistributable 2012-2017. La aplicación que se estaba ejecutando en el mensaje de error solo requería VC ++ 2010. Los desinstalé todos y luego reinstalé solo 2010 x86 / x64, y el error desapareció y la aplicación funcionó como se esperaba.
fuente
Eso puede suceder si por alguna razón se carga un recurso x86 desde una máquina x64. Para evitarlo explícitamente, agregue esta directiva de preprocesador a stdafx.h (por supuesto, en mi ejemplo, el recurso problemático es la DLL de controles comunes de Windows.
fuente
processorArchitecture='*'
, y eso es todo.Es posible que tenga varias versiones de las dll (s) en su sistema. Puede buscar en su sistema para averiguarlo. El problema puede resolverse simplemente cambiando el orden de los directorios en su ruta. Este fue mi problema. ( No se puede ejecutar Qt Creator GUI fuera de Qt. Error "La aplicación no pudo iniciarse correctamente (0xc000007b)" )
fuente