Condividi tramite


Uso di tipi di dati generici

Se si usano tipi di dati generici nel codice, è possibile compilarli per Unicode semplicemente usando una direttiva del preprocessore per definire "UNICODE" prima delle istruzioni #include per i file di intestazione. Per compilare il codice per le tabelle codici Windows (ANSI), omettere la definizione "UNICODE". Le nuove applicazioni Windows devono usare Unicode per evitare incoerenze di tabelle 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 tabelle 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 Windows per stringhe.

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

  3. Dichiarare i puntatori di tipo indeterminato in modo esplicito come puntatori void usando LPVOID in base alle esigenze.

  4. Rendere l'aritmetica dei puntatori indipendente dal tipo. L'uso di unità di dimensione TCHAR produce variabili di 2 byte se UNICODE è definito e 1 byte se UNICODE non è definito. L'utilizzo dell'aritmetica del 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 utilizzati.

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

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

    chNext = *++lpText;
    
  5. Sostituire le stringhe letterali e le costanti di carattere manifest con macro. Modificare espressioni come quella seguente.

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

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

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

    La macro TEXT fa in modo che le stringhe vengano valutate come L"string" quando UNICODE è definito, e come "string" in caso contrario. Per semplificare la gestione, spostare le stringhe letterali nelle risorse, soprattutto se contengono caratteri esterni all'intervallo ASCII (0x00 tramite 0x7F) o vengono esposte nell'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 ulteriori informazioni, vedere Convenzioni per i prototipi di funzioni.

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

  8. Se si adatta un'applicazione scritta originariamente per le tabelle codici di Windows, ricordarsi di modificare qualsiasi codice che si basa 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 tabelle codici di Windows.

uso di set di caratteri e Unicode