Dela via


Programmeringssammanfattning för Unicode

Om du vill dra nytta av MFC- och C-körningsstödet för Unicode måste du:

  • Definiera _UNICODE.

    Definiera symbolen _UNICODE innan du skapar programmet.

  • Ange startpunkt.

    På sidan Avancerat i mappen Linker i dialogrutan Egenskapssidor för projektet anger du entry point-symbolen till wWinMainCRTStartup.

  • Använd portabla körningsfunktioner och typer.

    Använd rätt C-körningsfunktioner för Unicode-stränghantering. Du kan använda wcs en serie funktioner, men du kanske föredrar de helt bärbara makrona (internationellt aktiverade). _TCHAR Dessa makron är alla prefixerade med _tcs; de ersätter, en och en, för str familjen med funktioner. Dessa funktioner beskrivs i detalj i avsnittet Internationalisering i Run-Time-biblioteksreferensen. Mer information finns iGeneric-Text Mappningar i tchar.h.

    Använd _TCHAR och de relaterade bärbara datatyperna som beskrivs i Stöd för Unicode.

  • Hantera literalsträngar korrekt.

    Visual C++-kompilatorn tolkar en literalsträng kodad som:

    L"this is a literal string"
    

    att betyda en sträng med Unicode-tecken. Du kan använda samma prefix för literaltecken. Använd makrot _T för att koda literalsträngar allmänt, så att de kompileras som Unicode-strängar under Unicode eller som ANSI-strängar (inklusive MBCS) utan Unicode. Till exempel, i stället för:

    pWnd->SetWindowText( "Hello" );
    

    använd:

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

    Med _UNICODE definierad, översätter _T den literala strängen till den L-prefixerade formen; annars, översätter _T strängen utan L-prefixet.

    Tips/Råd

    Makrot _T är identiskt med makrot _TEXT .

  • Var försiktig med att skicka stränglängder till funktioner.

    Vissa funktioner vill ha antalet tecken i en sträng. andra vill ha antalet byte. Till exempel, om _UNICODE är definierat, kommer följande anrop till ett CArchive-objekt inte att fungera (str är en CString):

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

    I ett Unicode-program ger längden dig antalet tecken men inte rätt antal byte, eftersom varje tecken är 2 byte brett. I stället måste du använda:

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

    som anger rätt antal byte som ska skrivas.

    MFC-medlemsfunktioner som är karaktärsorienterade i stället för byteorienterade fungerar dock utan den här extra kodningen:

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

    CDC::TextOut tar ett antal tecken, inte ett antal byte.

  • Använd fopen_s _wfopen_s för att öppna Unicode-filer.

För att sammanfatta ger MFC och körningsbiblioteket följande stöd för Unicode-programmering:

  • Förutom medlemsfunktioner för databasklass är alla MFC-funktioner Unicode-aktiverade, inklusive CString. CString tillhandahåller även Unicode/ANSI-konverteringsfunktioner.

  • Körningsbiblioteket tillhandahåller Unicode-versioner av alla stränghanteringsfunktioner. (Körbiblioteket tillhandahåller även portabla versioner som är lämpliga för Unicode eller MBCS. Dessa är _tcs-makrona.)

  • tchar.h tillhandahåller portabla datatyper och makrot _T för översättning av literalsträngar och tecken. Mer information finns iGeneric-Text Mappningar i tchar.h.

  • Körbiblioteket tillhandahåller en bredteckenversion av main. Använd wmain för att göra programmet Unicode-medvetet.

Se även

Stöd för Unicode