Visual C++ .NET - Mensaje de error c++

 
Vista:
sin imagen de perfil

Mensaje de error c++

Publicado por Yordanis (1 intervención) el 30/10/2008 03:02:45
Ya tengo bastante noción, de los fundamentos de c++, pero ahora estoy incursionando en las API de windows. Y el problema es que cuando genero el código en Visual C++, de una ventana simple: Me da 2 errores (los cuales deben ser lo mismo) que dice:

1>MSVCRTD.lib(crtexe.obj) : error LNK2019: símbolo externo _main sin resolver al que se hace referencia en la función ___tmainCRTStartup
1>D:Proyectos C++VentanaWindowsDebugVentanaWindows.exe : fatal error LNK1120: 1 externos sin resolver

El código que tengo es el siguiente:::

Listado 2
Programa Windows de ejemplo.
*/

#include <windows.h>

//--- Declaración de funciones del programa ------------------
int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int );
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

//--- Declaración de variables del programa ------------------
char WindowName[] = "Ventana de Windows";
char WindowTitle[] = "¡Hola, Mundo!";

//=== Función principal WinMain()============================
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
HWND hwnd;
MSG msg;
WNDCLASSEX wcx;

// Definimos la estructura de clase de ventana (campos):
wcx.cbSize = sizeof( WNDCLASSEX ); // tamaño de la estruct.
wcx.style = CS_HREDRAW | CS_VREDRAW; // valores más usuales
wcx.lpfnWndProc = WndProc; // función de ventana
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0; // informaciones extra
wcx.hInstance = hInstance; // instancia actual

// icono, cursor, fondo e icono pequeño de la clase de ventana:
wcx.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH) GetStockObject( WHITE_BRUSH );
wcx.hIconSm = LoadIcon(NULL, IDI_WINLOGO);

wcx.lpszMenuName = NULL; // nombre del menú
wcx.lpszClassName = WindowName; // nombre de la ventana

// Registramos la clase de ventana ya preparada:
if( !RegisterClassEx( &wcx ) )
return( FALSE ); // si hay error salir

// Creamos la ventana con CreateWindowEx():
hwnd = CreateWindowEx(
WS_EX_OVERLAPPEDWINDOW, // estilo extendido
WindowName, // nombre de la ventana
WindowTitle, // título de la ventana
WS_OVERLAPPEDWINDOW, // estilo de ventana
CW_USEDEFAULT, CW_USEDEFAULT, // Posición (x,y) en pantalla
400, 300, // ancho y alto de la ventana
NULL, NULL, // ventana padre e hija+menú
hInstance, // instancia actual
NULL // no hay más información
);

// Comprobamos la creación de la ventana:
if( !hwnd )
return( FALSE ); // si hay error, salir

// Hacemos visible la ventana y la actualizamos:
ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );

// Bucle de mensajes, envía los mensajes hacia WndProc
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg ); // convertimos el mensaje
DispatchMessage( &msg ); // devolvemos el control a w95
}

// devolvemos el valor recibido por PostQuitMessage().
return( msg.wParam );
}

//=== Función del procedimiento de ventana WndProc()===============
LRESULT CALLBACK WndProc( HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;

switch( message )
{
// mensaje producido en la creación de la ventana
case WM_CREATE:
break;

case WM_PAINT:
hdc = BeginPaint( hwnd, &ps );
GetClientRect( hwnd, &rect );
DrawText( hdc, "¡Hola Mundo!", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint( hwnd, &ps );
break;

// mensaje producido al cerrar la ventana
case WM_DESTROY:
PostQuitMessage( 0 );
break;

// resto de mensajes, dar una respuesta estándar.
// dejamos que el propio windows los responda :
default:
return( DefWindowProc( hwnd, message, wParam, lParam ) );
}

return(0);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Errores de enlace al compilar una aplicación de ventana en Windows

Publicado por Alejandro (265 intervenciones) el 05/02/2024 21:31:02
Yordanis, el problema que estás enfrentando se debe a que estás utilizando la configuración del compilador para una aplicación de consola (`WinMain` está diseñado para aplicaciones de Windows) pero el código parece ser para una aplicación de ventana.

Aquí hay algunos pasos para solucionar el problema:

1. Cambiar configuración del proyecto:
- Asegúrate de que estás configurando tu proyecto como una aplicación de Windows y no como una aplicación de consola. En Visual Studio, puedes cambiar esta configuración en "Project Properties" -> "Configuration Properties" -> "General" -> "Project Defaults" -> "Configuration Type". Asegúrate de que esté configurado como "Application (.exe)".

2. Cambiar la entrada principal:
- En lugar de `WinMain`, deberías usar `int main()` para una aplicación de consola. Sin embargo, para una aplicación de ventana en Windows, `WinMain` es la función de entrada principal. Asegúrate de tener `WinMain` en lugar de `main` en tu código.

3. Cambiar la configuración del enlace:
- Puedes cambiar la configuración del enlace para usar `WinMainCRTStartup` en lugar de `mainCRTStartup`. Esto se puede hacer en "Project Properties" -> "Configuration Properties" -> "Linker" -> "System" -> "SubSystem". Selecciona "Windows (/SUBSYSTEM:WINDOWS)".

Modifica estos aspectos y vuelve a compilar tu código. Esto debería resolver los errores de enlace que estás experimentando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar