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:
Definovat
_UNICODE.Před sestavením programu definujte symbol
_UNICODE.Zadejte vstupní bod.
Na stránce Upřesnit složky Linker v dialogovém okně Stránky vlastností projektu nastavte symbol vstupního bodu na
wWinMainCRTStartup.Používejte přenosné funkce a typy za běhu.
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í inicializace v referenční dokumentaci knihovny run-time. 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ává řetězce literálů.
Kompilátor Jazyka Visual C++ interpretuje literálový řetězec kódovaný jako:
L"this is a literal string"znaménkou znaky Unicode. Stejnou předponu můžete použít pro literální znaky.
_TMakro použijte k kódování literálových řetězců obecně, takže se kompilují jako řetězce Unicode v kódování Unicode nebo jako řetězce ANSI (včetně MBCS) bez unicode. Například místo:pWnd->SetWindowText( "Hello" );použijte:
pWnd->SetWindowText( _T("Hello") );Při
_UNICODEdefinování_Tpřeloží literálový řetězec do formuláře 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řídy databáze jsou všechny funkce MFC povolené kódování Unicode, včetně
CString.CStringposkytuje také funkce převodu Unicode/ANSI.Knihovna za běhu poskytuje verze Unicode všech funkcí pro zpracování řetězců. (Knihovna za běhu také poskytuje přenosné verze vhodné pro Unicode nebo PRO MBCS. Toto jsou
_tcsmakra.)tchar.h poskytuje přenosné datové typy a
_Tmakro pro překlad literálový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žíváwmainse k tomu, aby vaše aplikace věděla unicode.