Freigeben über


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 mit _tcs präfixiert. Sie ersetzen eins zu eins die Funktionen der str-Familie. Diese Funktionen werden im Abschnitt "Internationalisierung" der Laufzeitbibliotheksreferenz ausführlich beschrieben. Weitere Informationen finden Sie unter Generic-Text Mappings in tchar.h.

    Verwenden Sie _TCHAR und die zugehörigen portablen Datentypen, die in Unterstützung für Unicode beschrieben sind.

  • Umgehen Sie mit Zeichenfolgenliteralen ordnungsgemäß.

    Der Visual C++-Compiler interpretiert eine literale Zeichenfolge, die kodiert wurde als:

    L"this is a literal string"
    

    als eine Folge von Unicode-Zeichen bedeuten. 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. Als Beispiel verwenden Sie anstelle von

    pWnd->SetWindowText( "Hello" );
    

    verwenden:

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

    Mit der Definition von _UNICODE übersetzt _T die Literalzeichenfolge in die L-präfixierte Form; andernfalls übersetzt _T die Zeichenfolge ohne das L-Präfix.

    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. Stattdessen müssen Sie verwenden:

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

    Der Aufruf gibt die korrekte Anzahl der zu schreibenden Bytes an.

    MFC-Memberfunktionen, die zeichenorientiert statt byteorientiert sind, arbeiten 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 von Datenbankklassen sind alle MFC-Funktionen Unicode-fähig, 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. Verwenden Sie wmain, um Ihre Anwendung Unicode-fähig zu machen.

Siehe auch

Unterstützung für Unicode