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 präfixiert_tcs; sie ersetzen, eine für eine, für diestrFamilie 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
_TCHARund 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
_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. Verwenden Sie anstelle vonpWnd->SetWindowText( "Hello" );sondern:
pWnd->SetWindowText( _T("Hello") );Bei definitioner
_UNICODEDefinition_Twird die Literalzeichenfolge in das L-Präfix übersetzt. Andernfalls_Twird die Zeichenfolge ohne das Präfix L übersetzt.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. Sie müssen also den obigen Funktionsaufruf wie folgt ändern:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // validDieser 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::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 für Datenbankklassen sind alle MFC-Funktionen, 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. Wird verwendetwmain, um Ihre Anwendung Unicode-fähig zu machen.