SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: maxstepin en Martes 20 de Octubre de 2009, 22:05

Título: codeblocks y Unicode
Publicado por: maxstepin en Martes 20 de Octubre de 2009, 22:05
hola.
el siguiente codigo:
Código: C
  1. int WINAPI WinMain(HINSTANCE actual,
  2.                     HINSTANCE previa,
  3.                     LPSTR parametros,
  4.                     int cmd)
  5. {
  6.     MessageBoxA(NULL, "ascii", NULL, 0);
  7.     MessageBoxW(NULL, L"unicode", NULL, 0);
  8.     MessageBox(NULL, "cual", NULL,0);
  9. }
  10.  

lo he probado bajo vc++ sin problemas, puedo cambiar la configuracion del proyecto para multibyte o unicode para poder especificar una cosa u otra.
Pero, en codeblocks no encuentro tal opcion. Donde puedo configurar codeblocks para que el programa salga unicode?
no sera poniendo:
Código: C
  1. #define UNICODE
  2.  
al principio del fichero? yo ya lo he probado y no funciona.
gracias adelantadas
Título: Re: codeblocks y Unicode
Publicado por: Eternal Idol en Martes 20 de Octubre de 2009, 23:11
Los #define tienen que estar antes del #include de windows.h para que funcione.

Código: C++
  1. #define UNICODE
  2. #define _UNICODE
  3.  
  4. #include <windows.h>
  5. #include <tchar.h>
  6.  
  7. int WINAPI WinMain(HINSTANCE actual,
  8.                     HINSTANCE previa,
  9.                     LPSTR parametros,
  10.                     int cmd)
  11. {
  12.     MessageBox(NULL, _T("cual"), NULL,0);
  13. }
  14.  
Título: Re: codeblocks y Unicode
Publicado por: maxstepin en Miércoles 21 de Octubre de 2009, 22:50
Eternal Idol, funciono! gracias por la ayuda, rapida y concisa. Porque tiene que estar delante de el include? :mellow:
Título: Re: codeblocks y Unicode
Publicado por: Eternal Idol en Miércoles 21 de Octubre de 2009, 23:15
De nadas  :comp:

Las funciones de la API estan declaradas en windows.h (o en alguna otra cabecera que esta incluya directa o indirectamente), por ejemplo MessageBox sera MessageBoxA sino esta definido UNICODE/_UNICODE y MessageBoxW si lo esta. Extracto del SDK:

Código: C++
  1. WINUSERAPI
  2. int
  3. WINAPI
  4. MessageBoxA(
  5.     __in_opt HWND hWnd,
  6.     __in_opt LPCSTR lpText,
  7.     __in_opt LPCSTR lpCaption,
  8.     __in UINT uType);
  9. WINUSERAPI
  10. int
  11. WINAPI
  12. MessageBoxW(
  13.     __in_opt HWND hWnd,
  14.     __in_opt LPCWSTR lpText,
  15.     __in_opt LPCWSTR lpCaption,
  16.     __in UINT uType);
  17. #ifdef UNICODE
  18. #define MessageBox  MessageBoxW
  19. #else
  20. #define MessageBox  MessageBoxA
  21. #endif // !UNICODE
  22.  
Título: Re: codeblocks y Unicode
Publicado por: maxstepin en Jueves 22 de Octubre de 2009, 19:06
OK, gracias. Nunca te acostaras sin saber una cosa mas. :lol: