Använda allmänna datatyper

Om du använder generiska datatyper i koden kan den kompileras för Unicode- helt enkelt genom att använda ett preprocessordirektiv för att definiera "UNICODE" före #include-instruktionerna för huvudfilerna. Om du vill kompilera koden för Windows-kodsidor (ANSI)utelämnar du definitionen "UNICODE". Nya Windows-program bör använda Unicode för att undvika inkonsekvenser i olika kodsidor och förenkla lokaliseringen.

Så här skapar du källkod som kan kompileras antingen för att använda Unicode-tecken och -strängar eller för att använda tecken och strängar från Windows-kodsidor:

  1. Använd allmänna datatyper, till exempel TCHAR, LPTSTR och LPTCH, för alla tecken- och strängtyper som används för text. Mer information om allmänna typer finns i Windows-datatyper för strängar.

  2. Se till att pekare till icke-textdatabuffertar eller binära bytematriser kodas med datatyper som LPBYTE eller LPWORD, i stället för LPTSTR- eller LPTCH-typen.

  3. Deklarera pekare av obestämd typ explicit som tomrumspekare med hjälp av LPVOID efter behov.

  4. Gör pekaren aritmisk typoberoende. Om du använder enheter med TCHAR-storlek returneras variabler som är 2 byte om UNICODE definieras och 1 byte om UNICODE inte har definierats. Om du använder pekarens aritmetik returneras alltid antalet element som anges av pekaren, oavsett om elementen är 1 eller 2 byte stora. Följande uttryck hämtar alltid antalet element, oavsett om UNICODE har definierats.

    cCount = lpEnd - lpStart;
    

    Följande uttryck avgör antalet byte som används.

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

    Det finns ingen anledning att ändra en instruktion som följande, eftersom pekarens inkrement pekar på nästa teckenelement.

    chNext = *++lpText;
    
  5. Ersätt literalsträngar och manifestteckenkonstanter med makron. Ändra uttryck som följande.

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

    Använd TEXT makro enligt följande i det här uttrycket.

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

    Makrot TEXT gör att strängar utvärderas som L"-sträng" när UNICODE definieras och som "sträng" annars. För enklare hantering bör du flytta literalsträngar till resurser, särskilt om de innehåller tecken utanför ASCII-intervallet (0x00 till 0x7F) eller exponeras i användargränssnittet. För att stödja lokalisering av ditt program för olika nationella språk är det mycket viktigt att alla användargränssnittssträngar finns i lokala resurser.

  6. Använd de allmänna versionerna av Windows-funktionerna. Mer information finns i Konventioner för funktionsprototyper.

  7. Använd de allmänna versionerna av standardfunktionerna för C-bibliotekssträngen och kom ihåg att definiera "_UNICODE" samt "UNICODE", enligt beskrivningen i Standard C Functions.

  8. Om du anpassar ett program som ursprungligen skrevs för Windows-kodsidor, kom ihåg att ändra all kod som förlitar sig på 255 som det största värdet för ett tecken.

När du kompilerar kod som du har skrivit enligt beskrivningen ovan kan kompilatorn skapa både Unicode- och Windows-kodsideversioner av ditt program från samma källa. Beroende på definitionerna för UNICODE matchas de allmänna funktionerna för att skapa samma binära filer som om du skrev kod exklusivt för Unicode eller uteslutande för Windows-kodsidor.

Använda Unicode- och teckenuppsättningar