Udostępnij za pośrednictwem


Za pomocą TCHAR.Typy danych h z kodem _MBCS

Gdy manifestu stała _MBCS jest zdefiniowany, danej procedury tekst rodzajowy mapuje do jednego z następujących rodzajów procedur:

  • Procedura SBCS obsługuje bajtów wielobajtowych, znaków i łańcuchów, odpowiednio.W przypadku argumentów typu string, oczekuje się typu char *.Na przykład _tprintf mapy do printf; argumenty ciąg printf są typu char *.Jeśli korzystasz z _TCHAR typ danych tekst rodzajowy ciągu typy, typy parametrów formalnych i rzeczywiste dla printf odpowiadają, ponieważ _TCHAR* mapuje char *.

  • Procedury dotyczące MBCS.W przypadku argumentów typu string, oczekuje się typu unsignedchar *.Na przykład _tcsrev mapy do _mbsrev, którego oczekuje i zwraca wartość typu ciąg unsignedchar *.Jeśli korzystasz z _TCHAR nie ma typ danych tekst rodzajowy swój typ string jest potencjalny konflikt typu _TCHAR mapy wpisać char.

Poniżej przedstawiono trzy rozwiązania dla zapobiegania ten konflikt typu (i ostrzeżenia kompilatora c lub C++ błędy kompilatora, które mogłyby spowodować):

  • Używaj zachowania domyślnego.TCHAR.h przewiduje tekst rodzajowy prototypy rutynowych procedur w bibliotekach run-time, jak w poniższym przykładzie.

    char * _tcsrev(char *);
    

    W przypadku domyślnego prototyp _tcsrev mapy do _mbsrev poprzez thunk w Libc.lib.Powoduje to zmianę typów _mbsrev parametry przychodzących i wychodzących zwraca wartość z _TCHAR* (czyli char***) do unsignedchar***.Ta metoda zapewnia 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 wbudowanej funkcji pośredniczącej, w Tchar.h, rutynowe tekst rodzajowy bezpośrednio mapować do rutynowych MBCS właściwe.Poniższy fragment kodu 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 wpisz dopasowania i ma kosztu dodatkowego czasu.

  • Aby użyć bezpośredniego mapowania zawierające następującą instrukcję preprocesora w kodzie.

    #define _MB_MAP_DIRECT
    

    Rozwiązanie zapewnia szybkie alternatywne, jeśli nie chcesz używać domyślne zachowanie lub nie można używać inline.Powoduje ona rutynowych tekst rodzajowy mają być mapowane przez makro bezpośrednio do wersji MBCS rutynowych, jak w poniższym przykładzie z Tchar.h.

    #define _tcschr _mbschr
    

    Po wykonaniu tego podejścia, należy uważać, aby zapewnić wykorzystanie typy danych argumentów typu string i wartości zwracane w ciągu.Rzutowanie typu można użyć do zapewnienia właściwego typu dopasowania lub użyć _TXCHAR typ danych tekst rodzajowy._TXCHAR mapy wpisać char w, ale mapy i wpisz kod SBCS unsignedchar w kodzie MBCS.Aby uzyskać więcej informacji o makrach tekst rodzajowy, zobacz Tekst rodzajowy mapowania w Run-Time Library Reference.

Zobacz też

Koncepcje

Tekst rodzajowy mapowania w Tchar.h