Zusammenfassung der Unicode-Programmierung

Wenn Sie von MFC- und C-Laufzeitunterstützung für Unicode profitieren möchten, müssen Sie folgende Schritte ausführen:

  • Define _UNICODE.

    Definieren Sie das Symbol _UNICODE , bevor Sie Ihr Programm erstellen.

  • Geben Sie den Einstiegspunkt an.

    Legen Sie auf der Seite "Erweitert" des Ordners "Linker" im Dialogfeld "Eigenschaftenseiten" des Projekts das Eintragspunktsymbol auf wWinMainCRTStartup.

  • Verwenden Sie portable Laufzeitfunktionen und Typen.

    Verwenden Sie für die Behandlung von Unicode-Zeichenfolgen die richtigen C-Laufzeitfunktionen. Sie können die wcs Familie der Funktionen verwenden, aber Sie bevorzugen möglicherweise die vollständig portierbaren (international aktivierten) _TCHAR Makros. Diese Makros sind alle präfixiert _tcs; sie ersetzen, eine für eine, für die str Familie der Funktionen. Diese Funktionen werden im Abschnitt "Internationalisierung" der Laufzeitbibliotheksreferenz ausführlich beschrieben. Weitere Informationen finden Sie unter Generic-Text Mappings in tchar.h.

    Verwendung _TCHAR und die zugehörigen portablen Datentypen, die unter "Unterstützung für Unicode" beschrieben sind.

  • Bearbeiten Sie Zeichenfolgenliterale vorschriftsmäßig.

    Vom Visual C++-Compiler wird ein Zeichenfolgenliteral der Form

    L"this is a literal string"
    

    als Unicode-Zeichenfolge interpretiert. Sie können dasselbe Präfix für Literalzeichen verwenden. Verwenden Sie das _T Makro, um literale Zeichenfolgen generisch zu codieren, sodass sie als Unicode-Zeichenfolgen unter Unicode oder als ANSI-Zeichenfolgen (einschließlich MBCS) ohne Unicode kompiliert werden. Verwenden Sie anstelle von

    pWnd->SetWindowText( "Hello" );
    

    Verwenden Sie Folgendes:

    pWnd->SetWindowText( _T("Hello") );
    

    Bei definitioner _UNICODE Definition _T wird die Literalzeichenfolge in das L-Präfix übersetzt. Andernfalls _T wird die Zeichenfolge ohne das Präfix L übersetzt.

    Tipp

    Das _T Makro ist identisch mit dem _TEXT Makro.

  • Gehen Sie beim Übergeben von Zeichenfolgenlängen an Funktionen mit Bedacht vor.

    Bei einigen Funktionen muss die Anzahl der Zeichen in einer Zeichenfolge angegeben werden, bei anderen Funktionen die Anzahl der Bytes. Wenn beispielsweise _UNICODE definiert ist, funktioniert der folgende Aufruf eines CArchive Objekts nicht (str ist ein CString):

    archive.Write( str, str.GetLength( ) );    // invalid
    

    In einer Unicode-Anwendung gibt die Länge die Zeichenanzahl, aber nicht die richtige Byte-Anzahl an, da jedes Zeichen zwei Bytes breit ist. Sie müssen also den obigen Funktionsaufruf wie folgt ändern:

    archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) );    // valid
    

    Dieser Aufruf gibt fehlerfrei an, wie viele Bytes geschrieben werden sollen.

    Zeichenorientierte MFC-Memberfunktionen arbeiten jedoch im Gegensatz zu Byte-orientierten Memberfunktionen ohne diese zusätzliche Codierung:

    pDC->TextOut( str, str.GetLength( ) );
    

    Für CDC::TextOut ist eine Anzahl von Zeichen, nicht eine Anzahl von Bytes erforderlich.

  • Verwenden Sie fopen_s, _wfopen_s , um Unicode-Dateien zu öffnen.

Um zusammenzufassen, bieten MFC und die Laufzeitbibliothek die folgende Unterstützung für die Unicode-Programmierung:

  • Mit Ausnahme der Memberfunktionen für Datenbankklassen sind alle MFC-Funktionen, einschließlich CString. CString stellt darüber hinaus Unicode/ANSI-Konvertierungsfunktionen bereit.

  • Die Laufzeitbibliothek stellt Unicode-Versionen aller Funktionen zur Behandlung von Zeichenfolgen zur Verfügung. (Die Laufzeitbibliothek stellt auch portable Versionen zur Verfügung, die für Unicode oder FÜR MBCS geeignet sind. Dies sind die _tcs Makros.)

  • tchar.h stellt tragbare Datentypen und das _T Makro zum Übersetzen von Literalzeichenfolgen und Zeichen bereit. Weitere Informationen finden Sie unter Generic-Text Mappings in tchar.h.

  • Die Laufzeitbibliothek bietet eine breitformatige Version von main. Wird verwendet wmain , um Ihre Anwendung Unicode-fähig zu machen.

Siehe auch

Unterstützung für Unicode