Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para aproveitar o suporte de tempo de execução MFC e C para Unicode, você precisa:
Definir
_UNICODE.Defina o símbolo
_UNICODEantes de criar o programa.Especifique o ponto de entrada.
Na página Avançado da pasta Linker na caixa de diálogo Páginas de Propriedades do projeto, defina o símbolo Entry Point para
wWinMainCRTStartup.Use funções e tipos de tempo de execução portáteis.
Use as funções de tempo de execução C adequadas para manipulação de cadeia de caracteres Unicode. Você pode usar a
wcsfamília de funções, mas pode preferir as macros totalmente portáteis (habilitadas internacionalmente)._TCHAREssas macros são todas prefixadas com_tcs, elas substituem, uma por uma, astrfamília de funções. Essas funções são descritas em detalhes na seção Internacionalização da Referência de BibliotecaRun-Time. Para obter mais informações, consulte Generic-Text mapeamentos em tchar.h.Use
_TCHARe os tipos de dados portáteis relacionados descritos em Suporte para Unicode.Manipule cadeias de caracteres literais corretamente.
O compilador do Visual C++ interpreta uma cadeia de caracteres literal codificada como:
L"this is a literal string"para significar uma cadeia de caracteres Unicode. Você pode usar o mesmo prefixo para caracteres literais. Use a
_Tmacro para codificar cadeias de caracteres literais genericamente, para que elas sejam compiladas como cadeias de caracteres Unicode em Unicode ou como cadeias de caracteres ANSI (incluindo MBCS) sem Unicode. Por exemplo, em vez de:pWnd->SetWindowText( "Hello" );utilize:
pWnd->SetWindowText( _T("Hello") );Com
_UNICODEdefinido,_Ttraduz a string literal para a forma prefixada L, caso contrário,_Ttraduz a string sem o prefixo L.Sugestão
A
_Tmacro é idêntica à_TEXTmacro.Tenha cuidado ao passar comprimentos de strings para funções.
Algumas funções querem o número de caracteres em uma cadeia de caracteres; outros querem o número de bytes. Por exemplo, se
_UNICODEestiver definida, a seguinte chamada para umCArchiveobjeto não funcionará (stré umCString):archive.Write( str, str.GetLength( ) ); // invalidEm um aplicativo Unicode, o comprimento fornece o número de caracteres, mas não o número correto de bytes, porque cada caractere tem 2 bytes de largura. Em vez disso, você deve usar:
archive.Write( str, str.GetLength( ) * sizeof( _TCHAR ) ); // validque especifica o número correto de bytes a serem gravados.
No entanto, as funções de membro MFC que são orientadas a caracteres, em vez de bytes, funcionam sem esta codificação extra:
pDC->TextOut( str, str.GetLength( ) );CDC::TextOutusa um número de caracteres, não um número de bytes.Use fopen_s _wfopen_s para abrir arquivos Unicode.
Para resumir, MFC e a biblioteca de tempo de execução fornecem o seguinte suporte para programação Unicode:
Exceto para funções de membro de classe de banco de dados, todas as funções MFC são habilitadas para Unicode, incluindo
CString.CStringtambém fornece funções de conversão Unicode/ANSI.A biblioteca de execução fornece versões Unicode de todas as funções de manipulação de strings. (A biblioteca de tempo de execução também fornece versões portáteis adequadas para Unicode ou MBCS. Estas são as macros
_tcs.)tchar.h fornece tipos de dados portáteis e a macro
_Tpara traduzir cadeias literais e caracteres. Para obter mais informações, consulte Generic-Text mapeamentos em tchar.h.A biblioteca de tempo de execução fornece uma versão de caracteres largos do
main. Usewmainpara tornar a sua aplicação compatível com Unicode.