C++-Anwendungen für Unicode anpassen
Nach oben zu Unicode für C++ - Index
Weil der Standard-String Unicode ist, sollte der C++-Code, der die VCL verwendet, Unicode-sensitiv sein. Mit der Option _TCHAR-Zuordnung des Dialogfelds Projekt > Optionen > C++ (Gemeinsame Optionen) können Sie sicherstellen, dass Ihr Code sowohl "Narrow"- als auch "Wide"-Strings korrekt verarbeitet.
Hinweis: Neue C++-Anwendungen (einschließlich C++-Konsolenanwendungen), die die VCL verwenden, setzen jetzt automatisch die Option _TCHAR-Zuordnung aufwchar_tund enthalten einen_tmain(...)-Eintrittspunkt, der inmainübergeht. C++-Anwendungen, bei dennen die Option _TCHAR-Zuordnung automatisch gesetzt ist, verwenden die korrekten Floating-Funktionen.
Inhaltsverzeichnis |
Unicode-bezogene Fragen für C++
In C++ gibt es eine Reihe mit Unicode zusammenhängende Fragen, die für Delphi-Anwender nicht relevant sind. Diese Fragen ergeben sich aus der Tatsache, dass die C++-RTL und die Windows-API standardmäßig "narrow" sind, die VCL aber jetzt "wide" ist. Einige dieser Fragen werden im Folgenden behandelt.
Verwenden der VCL und der C++-RTL
Die VCL ist "wide" (verwendet Unicode), die C++-RTL ist dagegen standardmäßig "narrow", enthält aber Routinen sowohl für "wide"- als auch für "narrow"-Strings (siehe Floating-Funktionen). In Anwendungen, die die VCL verwenden, müssen Sie daher die "wide"-Versionen der RTL-Funktionen einsetzen. Um die C++-RTL in einer VCL-Anwendung (oder einer beliebigen Anwendung, für die "wide"-Strings erforderlich sind) zu verwenden, müssen Sie Folgendes ausführen:
- Setzen Sie _TCHAR-Zuordnung auf
wchar_t, und verwenden Sie _TCHAR in Ihrem Quellcode. - Verwenden Sie die "Floating"-Version der RTL-Member, wie z.B.
_tcscpyanstattstrcpy. Siehe die Liste der Floating-Funktionen.
Verwenden der Windows-API
Die Windows-API ist normalerweise per Vorgabe "narrow". Die _TCHAR-Zuordnungsoption ist hier außerordentlich hilfreich, aber die Option ist für C++-Anwendungen, die die VCL nicht verwenden, per Vorgabe auf char gesetzt.
Zur Verwendung der Windows-API in einer C++-Anwendung, die die VCL nicht verwendet, müssen Sie die Option _TCHAR entspricht im Dialogfeld Projekt > Optionen > C++ (Gemeinsame Optionen) explizit auf wchar_t setzen.
Übergeben von String-Konstanten
String-Konstanten, wie z.B. "string constant", sind weiterhin "narrow" (char*), daher können sie nicht wie früher an VCL-Funktionen übergeben werden, die PChar übernehmen. Sie können die Konstante an VCL-Funktionen mit einem PChar-Parameter übergeben, wenn Sie der Konstante ein L voranstellen, wie in:
-
L"string constant"
Diese Umwandlung wird automatisch ausgeführt, wenn Sie die _TCHAR-Zuordnung auf wchar_t setzen und die Makros _TEXT oder _T, wie unter _TCHAR-Zuordnung beschrieben, verwenden.
Festlegen der Codeseite
Mit AnsiStringT<Codeseite> können Sie die Codeseite für AnsiString-Typen festlegen.
Es sind dieselben vordefinierten Typen vorhanden, die auch Delphi zur Verfügung stellt:
- AnsiString ist
AnsiStringT<0>. - UTF8String ist
AnsiStringT<65005>, die UTF8-Codeseite. - RawByteString ist
AnsiStringT<0xFFFF>.
Hinweis: Die UTF8-Codierung kann festgelegt werden, indem unter Verwendung der UTF8-Codeseite die Strings zwischen den API-RTL- und VCL-Aufrufen umgewandelt werden. Siehe UTF-8-Konvertierungsroutinen.