Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
wcsFamilie der Funktionen verwenden, aber Sie bevorzugen möglicherweise die vollständig portierbaren (international aktivierten)_TCHARMakros. Diese Makros sind alle mit_tcspräfixiert. Sie ersetzen eins zu eins die Funktionen derstr-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
_TCHARund 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
_TMakro, 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 vonpWnd->SetWindowText( "Hello" );verwenden:
pWnd->SetWindowText( _T("Hello") );Mit der Definition von
_UNICODEübersetzt_Tdie Literalzeichenfolge in die L-präfixierte Form; andernfalls übersetzt_Tdie Zeichenfolge ohne das L-Präfix.Tipp
Das
_TMakro ist identisch mit dem_TEXTMakro.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
_UNICODEdefiniert ist, funktioniert der folgende Aufruf einesCArchiveObjekts nicht (strist einCString):archive.Write( str, str.GetLength( ) ); // invalidIn 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 ) ); // validDer 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::TextOutist 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.CStringstellt 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
_tcsMakros.)tchar.h stellt tragbare Datentypen und das
_TMakro 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 Siewmain, um Ihre Anwendung Unicode-fähig zu machen.