Sdílet prostřednictvím


Použití obecných datových typů

Pokud v kódu používáte obecné datové typy, lze je zkompilovat pro Unicode jednoduše pomocí direktivy preprocesoru definovat "UNICODE" před příkazy #include pro soubory hlaviček. Chcete-li zkompilovat kód pro Windows (ANSI) kódové stránky, vynechat definici "UNICODE". Nové aplikace pro Windows by měly používat Unicode, aby se zabránilo nekonzistence různých znakových stránek a zjednodušení lokalizace.

Chcete-li vytvořit zdrojový kód, který lze zkompilovat buď tak, aby používal znaky a řetězce Unicode, nebo aby používal znaky a řetězce ze stránek kódu Systému Windows:

  1. Pro všechny typy znaků a řetězců používaných pro text použijte obecné datové typy, jako jsou TCHAR, LPTSTR a LPTCH. Další informace o obecných typech najdete v části Datové typy Windows pro řetězce.

  2. Ujistěte se, že ukazatele na vyrovnávací paměti dat, které nejsou textové nebo na binární bajtová pole, jsou kódovány datovými typy, jako je LPBYTE nebo LPWORD, namísto typu LPTSTR nebo LPTCH.

  3. Deklarujte ukazatele neurčitého typu explicitně jako ukazatele void pomocí LPVOID podle potřeby.

  4. Udělejte aritmetiku ukazatele nezávislou na typu. Použití jednotek velikosti TCHAR poskytuje proměnné, které jsou 2 bajty, pokud je definován unicode, a 1 bajt, pokud unicode není definován. Použití aritmetiky ukazatele vždy vrátí počet prvků označených ukazatelem, bez ohledu na to, zda mají prvky velikost 1 nebo 2 bajty. Následující výraz vždy načte počet prvků, bez ohledu na to, zda je definován UNICODE.

    cCount = lpEnd - lpStart;
    

    Následující výraz určuje počet použitých bajtů.

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

    Není nutné měnit příkaz podobný následujícímu, protože ukazatel se posunuje na další znak.

    chNext = *++lpText;
    
  5. Nahraďte literální řetězce a konstanty znaků v kódu makry. Změňte výrazy jako v následujícím příkladu.

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

    V tomto výrazu použijte makro TEXT následujícím způsobem.

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

    Makro TEXT způsobí, že se řetězce vyhodnocují jako L"řetězec", pokud je UNICODE definován, a jinak jako "řetězec". Pro snadnější správu přesuňte textové řetězce do prostředků, zejména pokud obsahují znaky mimo rozsah ASCII (0x00 až po 0x7F) nebo jsou viditelné v uživatelském rozhraní. Pokud chcete podporovat lokalizaci vaší aplikace pro různé národní jazyky, je velmi důležité, aby všechny řetězce uživatelského rozhraní byly v lokalizovatelných prostředcích.

  6. Použijte obecné verze funkcí systému Windows. Další informace naleznete v tématu Konvence pro prototypy funkcí.

  7. Používejte obecné verze standardních řetězcových funkcí knihovny jazyka C a nezapomeňte definovat "_UNICODE" a také "UNICODE", jak je popsáno v standardních funkcích jazyka C.

  8. Pokud upravujete aplikaci původně napsanou pro znakové stránky Windows, nezapomeňte změnit jakýkoli kód, který se spoléhá na 255 jako největší hodnotu znaku.

Při kompilaci kódu, který jste napsali výše, může kompilátor vytvářet verze znakové stránky Unicode i Windows aplikace ze stejného zdroje. V závislosti na definicích unicode se obecné funkce přeloží tak, aby vytvářely stejné binární soubory, jako kdybyste napsali kód výhradně pro Unicode nebo výhradně pro stránky kódu Systému Windows.

Použití Unicode a Znakoových Sad