8
votes

Pourquoi mon application d'interface graphique C ++ simple montre-t-elle une boîte de message en chinois?

OH comme pour l'ensemble (LPCWSTR) chose de casting: il ne compilerait pas à moins que je ne lesisiez ceux-ci. Cela m'a donné ce message d'erreur:

Erreur 1 Erreur C2664: 'MessageBoxw': impossible de convertir le paramètre 2 de 'Const Char [22]' à 'LPCWSTR'


4 commentaires

Je ne sais pas pourquoi, mais votre titre de question m'a fait LMFAO. :'RÉ


Je me demande ce que signifient ces personnages ...


C'est des ordures chinoises, ce qui signifie que cela ne signifie rien.懂 不 不 不?


En général, ne jetez pas les choses pour satisfaire le compilateur. Si vous pensez avoir besoin d'écrire une distribution, vous devez savoir exactement ce que la distribution fera et pourquoi c'est nécessaire. Si vous ne le faites pas, demandez de l'aide.


3 Réponses :


0
votes

Ma forte suppose est que votre fichier source a le mauvais encodage. Pouvez-vous vérifier si elle est enregistrée dans certaines saveurs Unicode, probablement UTF-16?


1 commentaires

Je ne sais pas ce que vous êtes sur vous, mais vous devriez avoir une option "jeu de caractères" dans votre boîte de dialogue "Enregistrer comme ..." ou quelque part dans vos menus.



20
votes

Mettez une face à votre chaîne pour en faire une large chaîne. L "monde cruel au revoir"

Ensuite, vous n'aurez pas besoin de la distribution.

Vous pouvez également utiliser le texte ("") macro qui créera une chaîne Unicode ou une chaîne ASCII selon vos paramètres de configuration.

La raison pour laquelle vous voyiez chinois est que MessageBox interprétait une chaîne ASCII comme unicode.


2 commentaires

Ouais. Contrairement au reste du monde, qui fait unicode via UTF-8 codant, de sorte que les personnages ASCII de plaine OL 'ASCII ne fonctionnent que Microsoft décida de faire toute la chose de WCHAR UTF-16. Il rend le code plutôt non portable et le verrouille dans le monde de Microsoft, ce qui est bien sûr ce qu'ils veulent. (Il y a des moyens autour de cela, mais ils ne sont pas évidents pour le programmeur novice.)


UTF-8 n'existait pas lorsque NT a été créé (c'est-à-dire l'excuse qu'ils utilisent quand même), vous pouvez probablement trouver un message à ce sujet @ blogs.msdn.com/michkap



6
votes

Vous avez déjà votre réponse, mais c'est un bon exemple de la raison pour laquelle vous devriez utiliser les moulages. Oui, une distribution permettra de compiler votre code, mais à moins que vous ne compreniez ce qui se passe, probablement vous venez de créer un bogue.

En général, mes 3 règles de coulée sont:

  1. Ne pas lancer (corrigez le code).
  2. Ne pas lancer (ajustez vos types pour arrêter de besoin de la distribution)
  3. D'accord, jeté, mais revisitez votre décision demain et voyez si vous pouvez le faire n ° 1 ou n ° 2.

0 commentaires