• Sábado 20 de Abril de 2024, 14:14

Autor Tema:  Aplicacion Basica, funciona en Codeblocks no en VS2005  (Leído 1620 veces)

エリック

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Aplicacion Basica, funciona en Codeblocks no en VS2005
« en: Sábado 7 de Agosto de 2010, 22:28 »
0
Obtuve un problema al crear una aplicación básica, que busca generar una ventana.
En VS2005, creo un win32 Console Application vacio.
En CodeBlocks simplemente un archivo de códgigo en c++; luego añadi en ambos el siguiente código:
Código: C++
  1.  
  2. // PrimerPrograma.cpp : Defines the entry point for the console application.
  3. //
  4.  
  5. #include <windows.h>
  6. //#include "stdafx.h"
  7.  
  8. const char g_szClassName[]="myWindowClass";
  9.  
  10. LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
  11. {
  12.     switch(msg)
  13.     {
  14.         case WM_CLOSE:
  15.             DestroyWindow(hwnd);
  16.             break;
  17.         case WM_DESTROY:
  18.             PostQuitMessage(0);
  19.             break;
  20.         default:
  21.             return DefWindowProc(hwnd,msg,wParam,lParam);
  22.     }
  23.     return 0;
  24. }
  25. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
  26. {
  27.     WNDCLASSEX wc;
  28.     HWND hwnd;
  29.     MSG msg;
  30.     wc.cbSize=sizeof(WNDCLASSEX);
  31.     wc.style=0;
  32.     wc.lpfnWndProc=WndProc;
  33.     wc.cbClsExtra=0;
  34.     wc.cbWndExtra=0;
  35.     wc.hInstance=hInstance;
  36.     wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  37.     wc.hCursor=LoadCursor(NULL,IDC_ARROW);
  38.     wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
  39.     wc.lpszMenuName=NULL;
  40.     wc.lpszClassName=g_szClassName;
  41.     wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
  42.     if(!RegisterClassEx(&wc))
  43.     {
  44.         MessageBox(NULL,"Registracion de Windows Fallo!","Horror!",MB_ICONEXCLAMATION|MB_OK);
  45.         return 0;
  46.     }
  47.     hwnd=CreateWindowEx(WS_EX_CLIENTEDGE,g_szClassName,"Titulo",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,240,120,NULL,NULL,hInstance,NULL);
  48.     if(hwnd==NULL)
  49.     {
  50.         MessageBox(NULL,"Fallo la creacion de la ventana!","Error!",MB_ICONEXCLAMATION|MB_OK);
  51.         return 0;
  52.     }
  53.     ShowWindow(hwnd,nCmdShow);
  54.     UpdateWindow(hwnd);
  55.     while(GetMessage(&msg,NULL,0,0)>0)
  56.     {
  57.         TranslateMessage(&msg);
  58.         DispatchMessage(&msg);
  59.     }
  60.     return msg.wParam;
  61. }
  62.  
  63.  
  64.  
El cuál en Codeblocks me genera una ventana, y todo va normal.
Pero cuando compilo en VS2005 me generan 4 errores:
*.cpp(39) : error C2440: '=' : cannot convert from 'const char [14]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
*.cpp(43) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [31]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
*.cpp(46) : error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [14]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
*.cpp(49) : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [33]' to 'LPCWSTR' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
*.cpp(59) : warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data

En VS2005, tiene problemas de tipo a la hora de convertir los literales, pero en Codeblocks no. :hitcomp:  :lol:  :unsure:
Que puede estar mal, es mi primera incursión programando "visualmente".
Gracias.

Radger

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Aplicacion Basica, funciona en Codeblocks no en VS2005
« Respuesta #1 en: Sábado 7 de Agosto de 2010, 22:58 »
0
Bueno eso ocurre por que tendras configurado el proyecto como Unicode.

Puedes ponerlo en multibyte en las propiedades del proyecto>General, tambien puedes hacer un cast a LPCWSTR.

Saludos

エリック

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Aplicacion Basica, funciona en Codeblocks no en VS2005
« Respuesta #2 en: Domingo 8 de Agosto de 2010, 03:32 »
0
Cita de: "Radger"
Bueno eso ocurre por que tendras configurado el proyecto como Unicode.

Puedes ponerlo en multibyte en las propiedades del proyecto>General, tambien puedes hacer un cast a LPCWSTR.

Saludos
Use windows Japones, virtualizado sobre Ubuntu, desde allí cree el programa ... entonces ¿Todo lo que cree allí aparecera por defecto como "Caracter Set: Unicode"?; cambie en Proyecto>Propiedades de la Aplicación>Propiedades de la Configuración - Usar  multi-byte.

Pero aún así no se corrigió el problema y me vota estos "nuevos" errores(Hice la construcción en un Windows en Español, espero que no importe):

1>------ Operación Generar iniciada: proyecto: aplicacion, configuración: Debug Win32 ------
1>Compiling...
1>main.cpp
1>c:...aplicacionaplicacionmain.cpp(59) : warning C4244: 'return' : conversion from 'WPARAM' to 'int', possible loss of data
1>Compiling manifest to resources...
1>Linking...
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup
1>C:...aplicacionDebugaplicacion.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:...aplicacionaplicacionDebugBuildLog.htm"
1>aplicacion - 2 error(s), 1 warning(s)
========== Generar: 0 correctos, 1 incorrectos, 0 actualizados, 0 omitidos ==========

Se supone que VS2005, debería prestarse a ser adecuado para la programación Visual.
Gracias por las respuestas, muy agradecido.