Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Quando a constante de manifesto _MBCS é definida, uma determinada rotina de texto genérico mapeado para um dos seguintes tipos de rotinas:
Uma rotina SBCS que lida com bytes, caracteres e cadeias de caracteres multibyte. Nesse caso, os argumentos de cadeia de caracteres devem ser do tipo
char*. Por exemplo,_tprintfé mapeado paraprintf; os argumentos de cadeia de caracteres paraprintfsão do tipochar*. Se você usar o_TCHARtipo de dados de texto genérico para a cadeia de tipos, os tipos de parâmetro formal e real paraprintfcorresponde porque_TCHAR*é mapeado parachar*.Uma rotina específica do MBCS. Nesse caso, os argumentos de cadeia de caracteres devem ser do tipo
unsigned char*. Por exemplo,_tcsrevé mapeado para_mbsrev, que espera e retorna uma cadeia de caracteres do tipounsigned char*. Se você usar o_TCHARtipo de dados de texto genérico para seus tipos de cadeia de caracteres, há a um possível conflito de tipo porque_TCHARé mapeado para o tipochar.
A seguir estão três soluções para evitar esse conflito de tipo (e os avisos do compilador C ou erros do compilador C++ que resultariam):
Use o comportamento padrão. tchar.h fornece protótipos de rotina de texto genérico para rotinas nas bibliotecas de tempo de execução, como no exemplo a seguir.
char * _tcsrev(char *);No caso padrão, o protótipo para
_tcsrevé mapeado para_mbsrevpor meio de uma conversão em Libc.lib. Isso altera os tipos dos parâmetros de entrada_mbsreve valores retornados de saída de_TCHAR*(comochar *) paraunsigned char *. Esse método garante o tipo que corresponde ao usar_TCHAR, mas é relativamente lenta devido à sobrecarga de chamada de função.Use inlining de função incorporando a seguinte instrução de pré-processador em seu código.
#define _USE_INLININGEsse método faz com que uma conversão de função embutida, fornecida em tchar.h, a rotina de texto genérico são mapeados diretamente para a rotina MBCS apropriada. O trecho de código de tchar.h a seguir fornece um exemplo de como isso é feito.
__inline char *_tcsrev(char *_s1) {return (char *)_mbsrev((unsigned char *)_s1);}Se você pode usar o inlining, essa é a melhor solução, pois ela garante o tipo de correspondência e tem um custo sem tempo adicional.
Use mapeamento direto incorporando a instrução de pré-processador a seguir em seu código.
#define _MB_MAP_DIRECTEssa abordagem fornece uma alternativa rápida se você não quiser usar o comportamento padrão ou não é possível usar inlining. Faz com que a rotina de texto genérico para ser mapeadas por uma macro diretamente para a versão MBCS de rotina, como no exemplo a seguir do tchar.h.
#define _tcschr _mbschrAo adotar essa abordagem, você deve ter cuidado para garantir o uso dos tipos de dados apropriados para argumentos de cadeia de caracteres e para valores de retorno de cadeia de caracteres. Você pode usar a conversão de tipo para garantir a correspondência do tipo correto ou você pode usar o
_TXCHARtipo de dados de texto genérico._TXCHARé mapeado para o tipocharno código SBCS mas é mapeado para o tipounsigned charno código MBCS. Para mais informações sobre macros de texto genérico, confira Mapeamentos de Texto Genérico na Referência da Biblioteca em Tempo de Execução.