x64 visual microsoft descargar visual-c++

visual c++ - visual - Diferencia entre Windows y la aplicación de consola



microsoft visual c++ 2018 (6)

Además de la diferencia mencionada por Konrad, las aplicaciones de consola y Windows se comportan de manera diferente cuando se las llama interactivamente desde el símbolo del sistema:

Cuando inicia una aplicación de consola, el símbolo del sistema no regresa hasta que la aplicación de consola se cierra. Cuando inicia una aplicación de Windows, el comando regresa inmediatamente.

Esto no es cierto para los archivos por lotes; siempre esperarán hasta que la aplicación salga. (Siempre puede usar el comando de inicio para iniciar una aplicación sin esperar).

¿Qué diferencias hay entre las aplicaciones de Windows y de la consola?

Al crear un nuevo proyecto en Visual C ++, solicita elegir cualquiera de los anteriores.


La aplicación de consola se ejecuta desde una línea de comandos de Windows (inicio / ejecución / cmd)

Se preconfigura una aplicación de Ventana para que pueda programar una aplicación GUI que se ejecute dentro del entorno de Windows.


La diferencia está en la forma en que se apagan las aplicaciones. Cuando utiliza la plantilla de la consola, tiene un talón que se encenderá en una consola. Si ya se está ejecutando en una consola, ignora la llamada para girar una.

Por la misma razón, una aplicación de Windows está diseñada con un formulario predeterminado. Si desea borrarlo, puede crear una aplicación sin forma de Windows Forms que sea esencialmente una aplicación de consola sin una ventana de consola.

En lo que respecta a las agallas de la aplicación, son esencialmente lo mismo. La diferencia principal se agrega en la etapa de compilación.




La única diferencia es que una aplicación de consola siempre genera una consola si no se inicia desde una (o la consola se suprime activamente al iniciar). Una aplicación de Windows, por otro lado, no genera una consola. Todavía se puede conectar a una consola existente o crear una nueva usando AllocConsole .

Esto hace que las aplicaciones de Windows sean más adecuadas para aplicaciones GUI o aplicaciones en segundo plano, ya que normalmente no desea tener una ventana de terminal creada para ellas.

En una nota más técnica, la única diferencia entre una consola y un ejecutable de Windows es un byte en el encabezado PE del archivo exe . Alternar este byte manualmente (por ejemplo, utilizando un editor hexadecimal) convierte el tipo de aplicación. Este es un truco bien publicado que se usa para crear aplicaciones de consola en VB6 (donde este tipo de aplicación no fue explícitamente compatible).

Para determinar y cambiar el tipo de subsistema de una aplicación, necesita leer partes del encabezado PE. Sin embargo, la dirección de los datos del subsistema no es fija, porque es parte del encabezado opcional del archivo cuya posición está determinada por una dirección almacenada en el encabezado del archivo DOS (en el miembro e_lfanew ). En realidad, esta dirección apunta al registro _IMAGE_NT_HEADERS que, a su vez, incluye la estructura IMAGE_OPTIONAL_HEADER32 . Esto tiene un int16 1) miembro llamado Subsystem . El valor del miembro es 2 para una aplicación de Windows y 3 para una aplicación de consola. Existen otros subsistemas (en particular, POSIX y kernel). He escrito una pequeña aplicación VB6 para cambiar el subsistema de una aplicación, que se puede descargar desde ActiveVB como código fuente.

El formato PE no está muy bien documentado, pero este documento puede servir como introducción: Peering Inside the PE: un recorrido por el formato de archivo ejecutable portátil Win32 .

1) Esto realmente no contradice mi afirmación de que solo un byte difiere: el byte más significativo de este miembro siempre es 0. Solo cambia el byte menos significativo.