Souhrn programování Unicode
Chcete-li využít knihovnu MFC a podporu jazyka C za běhu pro kódování Unicode, je třeba:
Definovat _UNICODE.
Definovat symbol _UNICODE před sestavením programu.
Určit vstupní bod.
Na stránce Výstup složky propojovacího programu v dialogovém okně Stránky vlastností projektu, nastavte symbol vstupního bodu wWinMainCRTStartup.
Použíjte přenostitelné běhové funkce a typy.
Použíjte vhodné běhové funkce jazyka C pro zpracování řetězce kódování Unicode.Můžete použít rodinu funkcí wcs, ale pravděpodobně budete preferovat plně přenositelné (mezinárodně povolené) makra _TCHAR.Tato makra jsou všechny s předponou _tcs; navzájem se nahrazují pro rodinu funkcí str.Tyto funkce jsou podrobně popsány v sekci InternacionalizaceReference běhové knihovny.Další informace naleznete v tématu Mapování obecného textu v Tchar.h.
Použíjte _TCHAR a související přenosítelné datové typy, popsané v Podpora kódování Unicode.
Vhodné zpracování řetězců literálu.
Kompilátor jazyka Visual C++ interpretuje řetězec literálu kódovaný jako:
L"this is a literal string"
pro porozumění řetězce znaků kódování Unicode.Můžete použít stejnou předponou pro znaky literálu.Použíjte makro _T do kódu obecných řetězců literálu, takže jsou kompilovány jako řetězce Unicode v kódování Unicode nebo řetězce ANSI (včetně znakové sady MBCS) bez kódování Unicode.Například namísto kódu:
pWnd->SetWindowText( "Hello" );
použití:
pWnd->SetWindowText( _T("Hello") );
S definovaným _UNICODE, překládá _T řetězcový literál do formy předpony L; jinak _T převede řetězec bez předpony L.
Tip
Makro _T je totožné s makrem _TEXT.
Předávejte opatrně délky řetězců funkcím.
Některé funkce chtějí počet znaků v řetězci; ostatní chtějí počet bajtů.Například pokud je definován _UNICODE, následující volání objektu CArchive nebude fungovat (str je CString):
archive.Write( str, str.GetLength( ) ); // invalid
V Unicode aplikaci Vám délka poskytne počet znaků, ale nesprávný počet bajtů, protože každý znak je dvoubajtový.Místo toho musíte použít:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // valid
který určuje správný počet bajtů pro zápis.
Avšak členské funkce knihovny MFC, které jsou zaměřené na znak, spíše než na bajt, pracují bez extra kódování:
pDC->TextOut( str, str.GetLength( ) );
CDC::TextOut bere počet znaků, ne počet bajtů.
Použíjte fopen_s _wfopen_s pro otevření souborů kódování Unicode.
Pro shrnutí, knihovna MFC a běhová knihovna, obsahují následující podporu programování kódování Unicode v systému Windows 2000:
S výjimkou členských funkcí databázové třídy, podporují všechny funkce knihovny MFC kódování Unicode, včetně CString. CString také poskytuje funkce převodu Unicode/ANSI.
Běhová knihovna poskytuje Unicode verze všech funkcí, které zpracovávájí řetězec.(Běhová knihovna také poskytuje přenositelné verze vhodné pro kódování Unicode nebo znakovou sadu MBCS.Jedná se o makra _tcs.)
Tchar.h poskytuje přenositelné datové typy a makro _T pro převod řetězců literálu a znaků.Další informace naleznete v tématu Mapování obecného textu v Tchar.h.
Běhová knihovna obsahuje verze širokého znaku main.Použíjte wmain pro uvědomění Vaší aplikaci do kódování Unicode.