Partilhar via


Resumo da programação Unicode

Para aproveitar o suporte de tempo de execução MFC e C para Unicode, você precisa:

  • Definir _UNICODE.

    Defina o símbolo _UNICODE antes 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 wcs família de funções, mas pode preferir as macros totalmente portáteis (habilitadas internacionalmente). _TCHAR Essas macros são todas prefixadas com _tcs, elas substituem, uma por uma, a str famí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 _TCHAR e 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 _T macro 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 _UNICODE definido, _T traduz a string literal para a forma prefixada L, caso contrário, _T traduz a string sem o prefixo L.

    Sugestão

    A _T macro é idêntica à _TEXT macro.

  • 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 _UNICODE estiver definida, a seguinte chamada para um CArchive objeto não funcionará (str é um CString):

    archive.Write( str, str.GetLength( ) );    // invalid
    

    Em 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 ) );    // valid
    

    que 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::TextOut usa 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. CString també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 _T para 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. Use wmain para tornar a sua aplicação compatível com Unicode.

Ver também

Suporte para Unicode