Verwenden generischer Datentypen

Wenn Sie generische Datentypen in Ihrem Code verwenden, kann dies für Unicode einfach mithilfe einer Präprozessordirektive kompiliert werden, um "UNICODE" vor den #include-Anweisungen für die Headerdateien zu definieren. Um den Codepages für Windows (ANSI) zu kompilieren, lassen Sie die Definition "UNICODE" aus. Neue Windows-Anwendungen sollten Unicode verwenden, um Inkonsistenzen unterschiedlicher Codeseiten zu vermeiden und die Lokalisierung zu vereinfachen.

So erstellen Sie Quellcode, der kompiliert werden kann, um Unicode-Zeichen und -Zeichenfolgen zu verwenden oder Zeichen und Zeichenfolgen von Windows-Codepages zu verwenden:

  1. Verwenden Sie generische Datentypen wie TCHAR, LPTSTR und LPTCH für alle Zeichen- und Zeichenfolgentypen, die für Text verwendet werden. Weitere Informationen zu generischen Typen finden Sie unter Windows-Datentypen für Zeichenfolgen.

  2. Stellen Sie sicher, dass Zeiger auf Nicht-Text-Datenpuffer oder binäre Bytearrays mit Datentypen wie LPBYTE oder LPWORD anstelle des LPTSTR- oder LPTCH-Typs codiert sind.

  3. Deklarieren Sie Zeiger des unbestimmten Typs explizit als void-Zeiger, indem Sie ggf. LPVOID verwenden.

  4. Machen Sie die Zeigerarithmetik vom Typ unabhängig. Die Verwendung von Einheiten der TCHAR-Größe ergibt Variablen, die 2 Bytes sind, wenn UNICODE definiert ist, und 1 Byte, wenn UNICODE nicht definiert ist. Die Verwendung der Zeigerarithmetik gibt immer die Anzahl der vom Zeiger angegebenen Elemente zurück, unabhängig davon, ob die Elemente 1 oder 2 Bytes groß sind. Der folgende Ausdruck ruft immer die Anzahl der Elemente ab, unabhängig davon, ob UNICODE definiert ist.

    cCount = lpEnd - lpStart;
    

    Der folgende Ausdruck bestimmt die Anzahl der verwendeten Bytes.

    cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
    

    Es ist nicht erforderlich, eine Anweisung wie die folgende zu ändern, da das Zeiger-Inkrement auf das nächste Zeichenelement verweist.

    chNext = *++lpText;
    
  5. Ersetzen Sie Literalzeichenfolgen und Manifestzeichenkonstanten durch Makros. Ändern Sie Ausdrücke wie den folgenden.

    while(*lpFileName++ != '\\')
    {
        // ...
    }
    

    Verwenden Sie das TEXT-Makro wie folgt in diesem Ausdruck.

    while(*lpFileName++ != TEXT('\\'))
    {
        // ...
    }
    

    Das TEXT-Makro bewirkt, dass Zeichenfolgen als L"Zeichenfolge" ausgewertet werden, wenn UNICODE definiert ist, und andernfalls als "Zeichenfolge". Um die Verwaltung zu vereinfachen, verschieben Sie Literalzeichenfolgen in Ressourcen, insbesondere, wenn sie Zeichen außerhalb des ASCII-Bereichs enthalten (0x00 bis 0x7F) oder auf der Benutzeroberfläche verfügbar gemacht werden. Um die Lokalisierung Ihrer Anwendung für verschiedene Landessprachen zu unterstützen, ist es sehr wichtig, dass sich alle Benutzeroberflächenzeichenfolgen in lokalisierbaren Ressourcen befinden.

  6. Verwenden Sie die generischen Versionen der Windows-Funktionen. Weitere Informationen finden Sie unter Konventionen für Funktionsprototypen.

  7. Verwenden Sie die generischen Versionen der Zeichenfolgenfunktionen der Standard-C-Bibliothek, und denken Sie daran, "_UNICODE" und "UNICODE" zu definieren, wie unter Standard C Functions beschrieben.

  8. Wenn Sie eine Anwendung anpassen, die ursprünglich für Windows-Codepages geschrieben wurde, denken Sie daran, code zu ändern, der auf 255 als größten Wert für ein Zeichen basiert.

Wenn Sie Code kompilieren, den Sie wie oben beschrieben geschrieben haben, kann der Compiler sowohl Unicode- als auch Windows-Codepageversionen Ihrer Anwendung aus derselben Quelle erstellen. Abhängig von den Definitionen für UNICODE werden die generischen Funktionen aufgelöst, um dieselben Binärdateien zu erzeugen, als ob Sie Code exklusiv für Unicode oder exklusiv für Windows-Codepages geschrieben haben.

Verwenden von Unicode- und Zeichensätzen