Resumo de programação Unicode

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

  • Definir _UNICODE.

    Definir o símbolo de _UNICODE antes de criar seu programa.

  • Especificar o ponto de entrada.

    Na página Avançado da pasta Vinculador na caixa de diálogo das Páginas de Propriedades do projeto, defina o símbolo Ponto de Entrada como wWinMainCRTStartup.

  • Usar funções e tipos em tempo de execução portáteis.

    Use as funções em tempo de execução C adequadas para tratar cadeia de caracteres Unicode. Você pode usar a família de funções wcs, mas talvez prefira as macros _TCHAR, totalmente portáteis (habilitadas internacionalmente). Essas macros são todas prefixadas com _tcs; elas substituem, uma por uma, a família de funções str. Essas funções são descritas detalhadamente na seção Internacionalização da Referência da Biblioteca de Runtime. Para obter mais informações, consulte Mapeamentos de texto genérico em tchar.h.

    Usar _TCHAR e os tipos de dados portáteis relacionados, descritos em Suporte para Unicode.

  • Manipular cadeias de caracteres literais corretamente.

    O compilador do Visual C++ interpreta uma cadeia de caracteres literal codificada como:

    L"this is a literal string"
    

    uma cadeia de caracteres Unicode. Você pode usar o mesmo prefixo para caracteres literais. Use a macro _T 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" );
    

    use:

    pWnd->SetWindowText( _T("Hello") );
    

    Com _UNICODE definido, _T converte a cadeia de caracteres literal para o formulário com prefixo L; caso contrário, _T converte a cadeia de caracteres sem o prefixo L.

    Dica

    A macro _T é idêntica à macro _TEXT.

  • Tenha cuidado ao passar comprimentos de cadeia de caracteres para funções.

    Algumas funções esperam o número de caracteres em uma cadeia de caracteres; outras esperam o número de bytes. Por exemplo, se _UNICODE for definida, a chamada a seguir para um objeto CArchive 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 membro do MFC que são orientadas a caracteres, em vez de orientadas a bytes, funcionam sem essa codificação extra:

    pDC->TextOut( str, str.GetLength( ) );
    

    CDC::TextOut usa o número de caracteres, não o número de bytes.

  • Usar fopen_s, _wfopen_s para abrir arquivos Unicode.

Para resumir, o MFC e a biblioteca de tempo de execução fornecem o seguinte suporte para programação Unicode:

  • Exceto para funções membro da 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 runtime fornece versões Unicode de todas as funções de tratamento de cadeia de caracteres. (A biblioteca de runtime também fornece versões portáteis adequadas para Unicode ou para MBCS. São as macros _tcs).

  • A tchar.h fornece tipos de dados portáteis e a macro _T para traduzir caracteres e cadeias de caracteres literais. Para obter mais informações, consulte Mapeamentos de texto genérico em tchar.h.

  • A biblioteca de runtime fornece uma versão de caractere largo de main. Use wmain para tornar seu aplicativo com reconhecimento Unicode.

Confira também

Suporte para Unicode