Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud chcete využít podporu prostředí MFC a běhu jazyka C pro Unicode, musíte:
Definujte
_UNICODE.Před sestavením programu definujte symbol
_UNICODE.Zadejte vstupní bod.
Na stránce Pokročilé ve složce Linker v dialogovém okně Stránky vlastností projektu nastavte symbol vstupního bodu na
wWinMainCRTStartup.Používejte přenosné funkce a typy v běhovém prostředí.
Pro zpracování řetězců Unicode použijte správné funkce běhu jazyka C. Můžete použít
wcsřadu funkcí, ale možná dáváte přednost plně přenosným (mezinárodně povoleným)_TCHARmakrům. Všechna tato makra mají předponu_tcs; nahrazují jednu za jedno prostrřadu funkcí. Tyto funkce jsou podrobně popsány v části Mezinárodní prostředí referenční dokumentaci knihovny běhového prostředí. Další informace naleznete v tématu Mapování obecného textu v tchar.h.Používejte
_TCHARa související přenosné datové typy popsané v tématu Podpora kódování Unicode.Správně zpracovávejte řetězce literálů.
Kompilátor Jazyka Visual C++ interpretuje literálový řetězec kódovaný jako:
L"this is a literal string"znamenat řetězec znaků Unicode Stejnou předponu můžete použít pro literální znaky. Makro
_Tpoužijte ke kódování literálových řetězců obecně, aby se kompilovaly jako řetězce Unicode, pokud používáte Unicode, nebo jako řetězce ANSI (včetně MBCS) bez Unicode. Například místo:pWnd->SetWindowText( "Hello" );použijte:
pWnd->SetWindowText( _T("Hello") );Je-li
_UNICODEdefinováno,_Tpřeloží textový řetězec do podoby s předponou L; v opačném případě_Tpřeloží řetězec bez předpony L.Návod
Makro
_Tje shodné s_TEXTmakrem.Dávejte pozor při předávání délky řetězců funkcím.
Některé funkce chtějí počet znaků v řetězci; ostatní chtějí počet bajtů. Pokud
_UNICODEje například definováno, následující volání objektuCArchivenebude fungovat (strjeCString):archive.Write( str, str.GetLength( ) ); // invalidV aplikaci Unicode poskytuje délka počet znaků, ale ne správný počet bajtů, protože každý znak je široký 2 bajty. Místo toho musíte použít:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // validurčuje správný počet bajtů k zápisu.
Členské funkce MFC, které jsou orientované na znaky, nikoli na bajty, ale fungují bez tohoto dodatečného kódování:
pDC->TextOut( str, str.GetLength( ) );CDC::TextOutpřebírá několik znaků, nikoli počet bajtů.K otevření souborů Unicode použijte fopen_s _wfopen_s .
Prostředí MFC a knihovna runtime poskytují následující podporu programování v kódování Unicode:
Kromě členských funkcí tříd databází podporují všechny funkce MFC Unicode, včetně
CString.CStringposkytuje také funkce převodu Unicode/ANSI.Běhová knihovna poskytuje verze Unicode všech řetězcových funkcí. (Knihovna runtime také poskytuje přenosné verze vhodné pro Unicode nebo MBCS. Toto jsou
_tcsmakra.)tchar.h nabízí přenositelné datové typy a makro
_Tpro překlad literálních řetězců a znaků. Další informace naleznete v tématu Mapování obecného textu v tchar.h.Knihovna runtime poskytuje širokoznakovou verzi
main. Použijtewmain, aby vaše aplikace správně pracovala s Unicode.