Riepilogo della programmazione Unicode

Per sfruttare i vantaggi del supporto di runtime MFC e C per Unicode, è necessario:

  • Definire _UNICODE.

    Definire il simbolo _UNICODE prima di compilare il programma.

  • Specificare il punto di ingresso.

    Nella pagina Avanzate della cartella Linker della finestra di dialogo Pagine delle proprietà del progetto impostare il simbolo punto di ingresso su wWinMainCRTStartup.

  • Usare funzioni e tipi di runtime portabili.

    Usare le funzioni di runtime C appropriate per la gestione delle stringhe Unicode. È possibile usare la wcs famiglia di funzioni, ma è possibile preferire le macro completamente portabili (abilitate a livello internazionale). _TCHAR Queste macro sono tutte precedute da _tcs; sostituiscono, una per una, per la str famiglia di funzioni. Queste funzioni sono descritte in dettaglio nella sezione Internazionalizzazione della guida di riferimento alla libreria di runtime. Per altre informazioni, vedere Mapping di testo generico in tchar.h.

    Usare _TCHAR e i tipi di dati portabili correlati descritti in Supporto per Unicode.

  • Gestire correttamente le stringhe letterali.

    Il compilatore Visual C++ interpreta una stringa letterale codificata come:

    L"this is a literal string"
    

    per indicare una stringa di caratteri Unicode. È possibile usare lo stesso prefisso per i caratteri letterali. Usare la _T macro per codificare le stringhe letterali in modo generico, in modo che vengano compilate come stringhe Unicode o come stringhe ANSI (incluso MBCS) senza Unicode. Ad esempio, anziché:

    pWnd->SetWindowText( "Hello" );
    

    usare:

    pWnd->SetWindowText( _T("Hello") );
    

    Con _UNICODE definito, _T converte la stringa letterale nel formato con prefisso L; in caso contrario, _T converte la stringa senza il prefisso L.

    Suggerimento

    La _T macro è identica alla _TEXT macro.

  • Prestare attenzione a passare le lunghezze delle stringhe alle funzioni.

    Alcune funzioni vogliono il numero di caratteri in una stringa; altri vogliono il numero di byte. Ad esempio, se _UNICODE è definito, la chiamata seguente a un CArchive oggetto non funzionerà (str è un CString):

    archive.Write( str, str.GetLength( ) );    // invalid
    

    In un'applicazione Unicode, la lunghezza fornisce il numero di caratteri, ma non il numero corretto di byte, perché ogni carattere è largo 2 byte. È invece necessario usare:

    archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) );    // valid
    

    che specifica il numero corretto di byte da scrivere.

    Tuttavia, le funzioni membro MFC orientate ai caratteri, anziché orientate ai byte, funzionano senza questo codice aggiuntivo:

    pDC->TextOut( str, str.GetLength( ) );
    

    CDC::TextOut accetta un numero di caratteri, non un numero di byte.

  • Usare fopen_s, _wfopen_s per aprire i file Unicode.

Per riepilogare, MFC e la libreria di runtime forniscono il supporto seguente per la programmazione Unicode:

  • Ad eccezione delle funzioni membro della classe di database, tutte le funzioni MFC sono abilitate per Unicode, incluso CString. CString fornisce anche funzioni di conversione Unicode/ANSI.

  • La libreria di runtime fornisce versioni Unicode di tutte le funzioni di gestione delle stringhe. La libreria di runtime fornisce anche versioni portabili adatte per Unicode o per MBCS. Queste sono le _tcs macro.

  • tchar.h fornisce tipi di dati portabili e la _T macro per la conversione di stringhe e caratteri letterali. Per altre informazioni, vedere Mapping di testo generico in tchar.h.

  • La libreria di runtime fornisce una versione a caratteri wide di main. Usare wmain per rendere l'applicazione compatibile con Unicode.

Vedi anche

Supporto per Unicode