Używanie typów danych TCHAR.H z kodem _MBCS
Gdy manifestu stała _MBCS jest zdefiniowana, danej procedury rodzajowa tekst jest mapowany do jednego z następujących rodzajów procedur:
Procedury SBCS obsługującym wielobajtowych bajty, znaki i ciągi odpowiednio.W tym przypadku argumentów typu string powinny być typu char *.Na przykład _tprintf mapy do printf; argumenty ciąg printf są typu char *.Jeśli używasz _TCHAR typ danych tekst rodzajowy dla ciągu typy, typy parametrów formalnych i rzeczywiste dla printf odpowiadał, ponieważ _TCHAR* mapuje char *.
Procedury MBCS specyficzne.W tym przypadku argumentów typu string powinny być typu unsignedchar *. Na przykład _tcsrev mapy do _mbsrev, który oczekuje i zwraca wartość typu ciąg typu unsignedchar *. Jeśli używasz _TCHAR tam swój typ string, typ danych tekst rodzajowy jest potencjalny konflikt typu _TCHAR mapy typu char.
Trzy rozwiązania dla zapobiegania ten konflikt typu (i ostrzeżenia kompilatora C lub błędy kompilatora języka C++, które spowodowałyby) są następujące:
Zachowanie domyślne.Tchar.h przewiduje tekst rodzajowy prototypów rutynowych procedur w biblioteki run-time, jak w poniższym przykładzie.
char * _tcsrev(char *);
W przypadku domyślnej prototypem _tcsrev mapy do _mbsrev za pośrednictwem thunk w Libc.lib.Zmienia typy _mbsrev Parametry przychodzących i wychodzących zwracanie wartości z _TCHAR* (to znaczy, char***) do unsignedchar***. Ta metoda gwarantuje typ dopasowania podczas korzystania z _TCHAR, ale jest stosunkowo wolno z powodu narzutów wywołania funkcji.
Aby użyć funkcji inline, zawierające następującą instrukcję preprocesora w kodzie.
#define _USE_INLINING
Ta metoda powoduje thunk funkcji wbudowanych, w Tchar.h, rutynowe rodzajowa tekst bezpośrednio mapować do odpowiednich rutynowych MBCS.W poniższym fragmencie kodu z Tchar.h zawiera przykład jak to zrobić.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}
Jeśli można użyć inline, jest najlepszym rozwiązaniem, ponieważ gwarantuje to typ dopasowania i ma koszt nie dodatkowego czasu.
Użyj bezpośredniego mapowania poprzez włączenie następującą instrukcję preprocesora w kodzie.
#define _MB_MAP_DIRECT
Ta metoda zapewnia szybko alternatywnych, jeśli nie chcesz używać domyślne zachowanie lub nie można używać inline.Powoduje to rutynowe rodzajowa tekst mają być mapowane przez makro bezpośrednio do wersji MBCS rutynowych, jak w poniższym przykładzie z Tchar.h.
#define _tcschr _mbschr
Gdy robisz to podejście należy uważać, aby zapewnić wykorzystanie odpowiedni typ danych dla argumenty ciąg znaków i ciąg wartości zwracane.Typ rzutowania służy do zapewnienia właściwego typ dopasowania lub użyć _TXCHAR typ danych tekst rodzajowy._TXCHAR mapy typu char w kod SBCS ale mapy typu unsignedchar w kodzie MBCS. Aby uzyskać więcej informacji o makrach tekst rodzajowy, zobacz Mapowań Generic Text w Run-Time Library odwołanie.