2010-01-17 7 views
7

¿Por qué mi aplicación simple de GUI de C++ muestra un cuadro de mensaje en chino?

Oh como para el conjunto (LPCWSTR) cosa de calidad:. No sería compilar menos que poner los de Me dio este mensaje de error:

de error 1 error C2664: 'MessageBoxW' : no se puede convertir el parámetro 2 de 'const char [22]' a 'LPCWSTR'

+0

No sé por qué, pero el título de su pregunta me hizo LMFAO. : 'D –

+0

lol. eso es dulce. – mpen

+0

Me pregunto qué significan estos personajes ... – liori

Respuesta

19

Ponga una L enfrente de su cuerda para hacerla una cuerda ancha. L "Adiós mundo cruel"

Entonces no necesitarás el elenco.

También puede usar la macro TEXTO ("") que creará una cadena Unicode o una cadena de caracteres según sus configuraciones.

La razón por la que estaba viendo chino es que MessageBox estaba interpretando una cadena ascii como unicode.

+0

Sí. A diferencia del resto del mundo, que hace Unicode a través de la codificación UTF-8, para que los simples caracteres ASCII simplemente funcionen, Microsoft decidió hacer todo el trabajo de WCHAR UTF-16. Hace que el código sea bastante no portátil y lo bloquea en el mundo de Microsoft, que es, por supuesto, lo que quieren. (Hay formas de evitarlo, pero no son obvios para el programador novato.) –

+0

UTF-8 no existía cuando se creó NT (Esa es la excusa que están usando de todos modos) Probablemente pueda encontrar una publicación al respecto @ http : //blogs.msdn.com/michkap/ – Anders

0

Mi fuerte suposición es que su archivo fuente tiene una codificación incorrecta. ¿Puedes verificar si está guardado en algún sabor Unicode, probablemente UTF-16?

+0

Claro ... ¿Cómo hago eso? –

+0

No sé en qué IDE está, pero debe tener una opción de "juego de caracteres" en su diálogo "guardar como ..." o en algún lugar de sus menús. –

6

Ya tiene su respuesta, pero este es un buen ejemplo de por qué debería usar evitar los moldes. Sí, un elenco hará compilar tu código, pero a menos que entiendas lo que está sucediendo, lo más probable es que acabes de crear un error.

En general, mis 3 reglas de la fundición son:

  1. no proyectan (arreglar el código).
  2. No moldear (ajuste sus tipos para dejar de necesitar el molde)
  3. Bien, moldee, pero revise su decisión mañana y vea si puede hacer # 1 o # 2.
Cuestiones relacionadas