Windows-Datentypen für Zeichenfolgen

Die meisten Zeichenfolgenvorgänge können dieselbe Logik für Unicode und für Windows-Codepages verwenden. Der einzige Unterschied besteht darin, dass die grundlegende Vorgangseinheit ein 16-Bit-Zeichen (auch als Breitzeichen bezeichnet) für Unicode und ein 8-Bit-Zeichen für Windows-Codepages ist. Die Windows-Headerdateien enthalten mehrere Typdefinitionen, die das Erstellen von Quellen erleichtern, die für Unicode oder für Windows-Codepages kompiliert werden können.

Windows unterstützt drei Sätze von Zeichen- und Zeichenfolgendatentypen: einen Satz generischer Typdefinitionen, die für Unicode- oder Windows-Codepages kompiliert werden können, und zwei Sätze bestimmter Typdefinitionen. Eine Gruppe bestimmter Typdefinitionen ist für die Verwendung mit Unicode und die andere für die Verwendung mit Windows-Codepages.

Eine Anwendung, die generische Datentypen verwendet, kann für Unicode kompiliert werden, indem einfach "UNICODE" vor den #include-Anweisungen für die Headerdateien oder während der Kompilierung definiert wird. Neue Windows-Anwendungen sollten Unicode verwenden, um die Inkonsistenzen verschiedener Codepages zu vermeiden und die Lokalisierung zu vereinfachen. Sie sollten mit generischen Datentypen geschrieben werden und "UNICODE" definieren, um diese Typen in Unicode-Typen zu kompilieren. An den wenigen Stellen, an denen eine Anwendung mit 8-Bit-Zeichendaten arbeiten muss, kann sie explizit die Typen für Windows-Codepages verwenden.

Die Möglichkeit, die generischen Typen in Typen für Windows-Codepages zu kompilieren, besteht hauptsächlich zur Unterstützung von Legacyanwendungen. Zum Kompilieren für Windows-Codepages wird die UNICODE-Definition von der Anwendung einfach weggelassen.

Das folgende Beispiel zeigt die Methode, die in den Windows-Headerdateien verwendet wird, um die drei Sätze von Datentypen zu definieren. Informationen zur Implementierung finden Sie in der Winnt.h-Headerdatei.

// Generic types

#ifdef UNICODE
    typedef wchar_t TCHAR;
#else
    typedef unsigned char TCHAR;
#endif

typedef TCHAR *LPTSTR, *LPTCH;

// 8-bit character specific

typedef unsigned char CHAR;
typedef CHAR *LPSTR, *LPCH;

// Unicode specific (wide characters)

typedef unsigned wchar_t WCHAR;
typedef WCHAR *LPWSTR, *LPWCH;

Der Buchstabe "T" in einer Typdefinition, z. B. TCHAR oder LPTSTR, bezeichnet einen generischen Typ, der entweder für Windows-Codepages oder Unicode kompiliert werden kann. Der Buchstabe "W" in einer Typdefinition, z. B. WCHAR oder LPWSTR, bezeichnet einen Unicode-Typ. Da Windows-Codepages im älteren Format vorliegen, verfügen sie über einfache Typdefinitionen, z. B. CHAR und LPSTR. Eine vollständige Beschreibung der Datentypen in Windows finden Sie unter Windows-Datentypen.

Unicode in der Windows-API