Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Om du vill dra nytta av MFC- och C-körningsstödet för Unicode måste du:
Definiera
_UNICODE.Definiera symbolen
_UNICODEinnan 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
wcsen serie funktioner, men du kanske föredrar de helt bärbara makrona (internationellt aktiverade)._TCHARDessa makron är alla prefixerade med_tcs; de ersätter, en och en, förstrfamiljen 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
_TCHARoch 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
_Tfö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
_UNICODEdefinierad, översätter_Tden literala strängen till den L-prefixerade formen; annars, översätter_Tsträ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 ettCArchive-objekt inte att fungera (strär enCString):archive.Write( str, str.GetLength( ) ); // invalidI 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 ) ); // validsom 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::TextOuttar 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.CStringtillhandahå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
_Tfö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ändwmainför att göra programmet Unicode-medvetet.