Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aby korzystać z obsługi MFC i języka C w czasie wykonywania dla Unicode, musisz:
Zdefiniuj .
_UNICODEZdefiniuj symbol
_UNICODEprzed utworzeniem programu.Określ punkt wejścia.
Na stronie Zaawansowane folderu Konsolidator w oknie dialogowym Strony właściwości projektu ustaw symbol punktu wejścia na
wWinMainCRTStartupwartość .Używaj przenośnych funkcji i typów czasu wykonywania.
Użyj odpowiednich funkcji czasu wykonywania języka C na potrzeby obsługi ciągów Unicode. Możesz użyć
wcsrodziny funkcji, ale możesz preferować w pełni przenośne (włączone na arenie międzynarodowej)_TCHARmakra. Wszystkie te makra są poprzedzone prefiksem_tcs; zastępują jedną dlastrjednej dla rodziny funkcji. Te funkcje zostały szczegółowo opisane w sekcji Internationalization (Internationalization) w dokumentacji biblioteki czasu wykonywania. Aby uzyskać więcej informacji, zobacz Ogólne mapowania tekstu w pliku tchar.h.Użyj
_TCHARi powiązanych przenośnych typów danych opisanych w temacie Obsługa formatu Unicode.Poprawnie obsłuż ciągi literału.
Kompilator języka Visual C++ interpretuje ciąg literału zakodowany jako:
L"this is a literal string"oznaczać ciąg znaków Unicode. Można użyć tego samego prefiksu dla znaków literałów. Użyj makra
_T, aby kodować ciągi literałów w sposób ogólny, więc kompilują się jako ciągi Unicode w formacie Unicode lub jako ciągi ANSI (w tym MBCS) bez formatu Unicode. Na przykład zamiast:pWnd->SetWindowText( "Hello" );Użyj programu:
pWnd->SetWindowText( _T("Hello") );Po
_UNICODEzdefiniowaniu_Tciąg literału tłumaczy ciąg literału na postać prefiksu L. W przeciwnym razie_Ttłumaczy ciąg bez prefiksu L.Napiwek
Makro
_Tjest identyczne z makrem_TEXT.Zachowaj ostrożność podczas przekazywania długości ciągów do funkcji.
Niektóre funkcje chcą mieć liczbę znaków w ciągu; inne chcą liczby bajtów. Na przykład jeśli
_UNICODEjest zdefiniowana, następujące wywołanieCArchiveobiektu nie będzie działać (strjest ):CStringarchive.Write( str, str.GetLength( ) ); // invalidW aplikacji Unicode długość daje liczbę znaków, ale nie poprawną liczbę bajtów, ponieważ każdy znak ma 2 bajty szerokości. Zamiast tego należy użyć:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // validokreśla prawidłową liczbę bajtów do zapisu.
Jednak funkcje składowe MFC, które są zorientowane na znaki, a nie zorientowane na bajty, działają bez tego dodatkowego kodowania:
pDC->TextOut( str, str.GetLength( ) );CDC::TextOutprzyjmuje liczbę znaków, a nie liczbę bajtów.Użyj fopen_s, _wfopen_s , aby otworzyć pliki Unicode.
Podsumowując, MFC i biblioteka czasu wykonywania zapewniają następującą obsługę programowania Unicode:
Z wyjątkiem funkcji składowych klasy bazy danych wszystkie funkcje MFC są włączone w formacie Unicode, w tym
CString.CStringUdostępnia również funkcje konwersji Unicode/ANSI.Biblioteka czasu wykonywania dostarcza wersje Unicode wszystkich funkcji obsługi ciągów. (Biblioteka czasu wykonywania dostarcza również przenośne wersje odpowiednie dla unicode lub MBCS.
_tcsSą to makra).tchar.h dostarcza przenośne typy danych i
_Tmakro do tłumaczenia ciągów literału i znaków. Aby uzyskać więcej informacji, zobacz Ogólne mapowania tekstu w pliku tchar.h.Biblioteka środowiska uruchomieniowego udostępnia szeroką wersję programu
main. Użyjwmainpolecenia , aby aplikacja korzystała z formatu Unicode.