Uso di tipi di dati generici

Se si usano tipi di dati generici nel codice, è possibile compilare per Unicode semplicemente usando una direttiva preprocessore per definire "UNICODE" prima delle istruzioni #include per i file di intestazione. Per compilare il codice per le pagine codici DI WINDOWS (ANSI), omettere la definizione "UNICODE". Le nuove applicazioni Windows devono usare Unicode per evitare le incongruenze di pagine codici diverse e semplificare la localizzazione.

Per creare codice sorgente che può essere compilato per usare caratteri e stringhe Unicode o per usare caratteri e stringhe dalle pagine codici di Windows:

  1. Usare tipi di dati generici, ad esempio TCHAR, LPTSTR e LPTCH, per tutti i tipi di caratteri e stringhe usati per il testo. Per altre informazioni sui tipi generici, vedere Tipi di dati di Windows per stringhe.

  2. Assicurarsi che i puntatori a buffer di dati non di testo o matrici di byte binarie siano codificati con tipi di dati come LPBYTE o LPWORD, anziché il tipo LPTSTR o LPTCH.

  3. Dichiarare puntatori di tipo indeterminato in modo esplicito come puntatori void usando LPVOID come appropriato.

  4. Rendere indipendente il tipo aritmetico del puntatore. L'uso di unità di dimensioni TCHAR restituisce variabili che sono 2 byte se UNICODE è definito e 1 byte se UNICODE non è definito. L'uso dell'aritmetica puntatore restituisce sempre il numero di elementi indicati dal puntatore, indipendentemente dal fatto che gli elementi siano di dimensioni pari a 1 o 2 byte. L'espressione seguente recupera sempre il numero di elementi, indipendentemente dal fatto che UNICODE sia definito.

    cCount = lpEnd - lpStart;
    

    L'espressione seguente determina il numero di byte usati.

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

    Non è necessario modificare un'istruzione come quella seguente, perché l'incremento del puntatore punta all'elemento carattere successivo.

    chNext = *++lpText;
    
  5. Sostituire le stringhe letterali e le costanti dei caratteri manifesto con macro. Modificare le espressioni come quella seguente.

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

    Usare la macro TEXT come illustrato di seguito in questa espressione.

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

    La macro TEXT causa la valutazione delle stringhe come L"string" quando UNICODE è definito e come "stringa" in caso contrario. Per semplificare la gestione, spostare le stringhe letterali nelle risorse, soprattutto se contengono caratteri all'esterno dell'intervallo ASCII (0x00 tramite 0x7F) o vengono esposti all'interfaccia utente. Per supportare la localizzazione dell'applicazione per lingue nazionali diverse, è molto importante che tutte le stringhe dell'interfaccia utente siano in risorse localizzabili.

  6. Usare le versioni generice delle funzioni di Windows. Per altre informazioni, vedere Convenzioni per i prototipi di funzione.

  7. Usare le versioni generiche delle funzioni di stringa della libreria C standard e ricordare di definire "_UNICODE" e "UNICODE", come illustrato in Funzioni C standard.

  8. Se si adatta un'applicazione originariamente scritta per le pagine codici di Windows, ricordarsi di modificare qualsiasi codice basato su 255 come valore più grande per un carattere.

Quando si compila il codice scritto come descritto in precedenza, il compilatore può creare versioni della tabella codici Unicode e Windows dell'applicazione dalla stessa origine. A seconda delle definizioni per UNICODE, le funzioni generiche vengono risolte per produrre gli stessi file binari come se si scrivesse codice esclusivamente per Unicode o esclusivamente per le pagine codici di Windows.

Uso di set di caratteri e Unicode