Warum zeigt meine einfache C ++ - GUI-Anwendung ein Meldungsfeld in Chinesisch an?

7

Oh wie für die ganze (LPCWSTR) Casting-Sache: Es würde nicht kompilieren, wenn ich die nicht einfüge. Es gab mir diese Fehlermeldung:

  

Fehler 1 Fehler C2664: 'MessageBoxW': kann Parameter 2 nicht von 'const char [22]' in 'LPCWSTR'

konvertieren
    
Bob Dylan 17.01.2010, 03:08
quelle

3 Antworten

19

Setzen Sie ein L vor Ihrer Zeichenfolge, um es zu einer breiten Zeichenfolge zu machen. L "Auf Wiedersehen grausame Welt"

Dann wirst du die Besetzung nicht brauchen.

Sie können auch das Makro TEXT ("") verwenden, das abhängig von Ihren Konfigurationseinstellungen eine Unicode-Zeichenfolge oder ASCII-Zeichenfolge erstellt.

Der Grund, warum Sie Chinesisch sahen, ist, dass MessageBox eine ASCII-Zeichenfolge als Unicode interpretierte.

    
Roland Rabien 17.01.2010, 03:13
quelle
6

Sie haben bereits Ihre Antwort, aber dies ist ein gutes Beispiel dafür, warum Sie Vermeiden Sie Casts verwenden sollten. Ja, eine Umwandlung wird Ihren Code kompilieren, aber wenn Sie nicht wissen, was vor sich geht, haben Sie wahrscheinlich gerade einen Fehler erstellt.

Im Allgemeinen sind meine 3 Castingregeln:

  1. Nicht umwandeln (den Code korrigieren).
  2. Nicht wirken (passen Sie Ihre Typen so an, dass sie keine Besetzung mehr benötigen)
  3. Okay, wirf dich um, aber besuche deine Entscheidung morgen noch einmal und schau, ob du # 1 oder # 2 machen kannst.
R Samuel Klatchko 17.01.2010 03:23
quelle
0

Meine starke Vermutung ist, dass Ihre Quelldatei die falsche Kodierung hat. Können Sie überprüfen, ob es in einem Unicode-Format gespeichert ist, höchstwahrscheinlich UTF-16?

    
Pekka 웃 17.01.2010 03:11
quelle

Tags und Links