2011-06-17 11 views
8

empecé a buscar en la API de Win32 en este sitio: http://www.winprog.org/tutorial/start.htmlWin32 in C - ¿Por qué mi texto aparece como un idioma extranjero?

He literalmente acaba de compilar el primer ejemplo y me ha dado un indicador de mensaje en chino/japonés, o algo por el estilo.

Pregunta: ¿Por qué?

Obviamente, en mi opinión, debería obtener "¡Adiós, mundo cruel!" en un cuadro de mensaje (Presumiblemente titulado 'Nota').

#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow) 
{ 
MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK); 
return 0; 
} 

Foreign...

Gracias.

+3

Estoy extremadamente aterrorizado de los chinos ... y cuadros de mensaje chinos: D –

+0

Parece un problema de codificación. –

+2

Está utilizando cadenas ANSI, pero compilando para Unicode. Tal vez ese sitio web debería haber mencionado algo sobre eso ... – Gabe

Respuesta

9

tratar de cambiar el código como el siguiente:

#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
LPSTR lpCmdLine, int nCmdShow) 
{ 
MessageBox(NULL, L"Goodbye, cruel world!", L"Note", MB_OK); 
return 0; 
} 

Si funciona es porque se echa en falta un poco de cabecera que punto el API correcta, pareces llamando MessageBoxW (la versión unicode) con una cadena ANSI. Si esto no es solo una prueba, pero está comenzando a escribir un programa del mundo real, considere garantizar qué tipo de caracter desea usar (esta es una bandera de precompilador por lo general). A continuación, utilice la macro _T( para que sus literales sean compatibles tanto con unicode/ansi.

Editar de @Benoit comentario: El inicio de un nuevo proyecto con VS 2008/10 establece el carácter Unicode establecido de manera predeterminada.

+0

Éxito. :) Lo marcará como correcto cuando el temporizador lo permita. – Anonymous

+3

Añadiría: comenzando con Visual Studio 2008 (o tal vez 2010) los proyectos nuevos usan el juego de caracteres Unicode de forma predeterminada. – Benoit

+0

La codificación de cadenas Unicode es tan problemática como la codificación de cadenas ANSI. Respete la configuración de Unicode en todo el proyecto y use '_T (" cadena ")' o use explícitamente la función que coincide con 'MessageBoxA' para ANSI y' MessageBoxW' para Unicode. –

5
MessageBox(NULL, _T("Goodbye, cruel world!"), _T("Note"), MB_OK); 

o

MessageBoxA(NULL, "Goodbye, cruel world!", "Note", MB_OK); 
1

No puedo configurarlo como predeterminado, por lo que cada nuevo proyecto debe establecerse. Para buscar la configuración: Usando Visual Studio 2010 Desde el menú principal → Proyectos → Propiedades → Propiedades de configuración → General → Detalles del proyecto → Conjunto de caracteres → "Usar juego de caracteres multibyte" (se configuró en "Usar conjunto de caracteres Unicode")

Después de eso, todo parece ir bien.

Cuestiones relacionadas