Share via


Usando tipos de dados genéricos

Se você usar tipos de dados genéricos em seu código, ele poderá ser compilado para Unicode simplesmente usando uma diretiva de pré-processador para definir "UNICODE" antes das instruções #include para os arquivos de cabeçalho. Para compilar o código para páginas de código do Windows (ANSI), omita a definição "UNICODE". Novos aplicativos do Windows devem usar Unicode para evitar inconsistências de páginas de código variadas e simplificar a localização.

Para criar código-fonte que pode ser compilado para usar caracteres Unicode e cadeias de caracteres ou para usar caracteres e cadeias de caracteres de páginas de código do Windows:

  1. Use tipos de dados genéricos, como TCHAR, LPTSTR e LPTCH, para todos os tipos de caracteres e cadeias de caracteres usados para texto. Para obter mais informações sobre tipos genéricos, consulte Tipos de dados do Windows para cadeias de caracteres.

  2. Certifique-se de que os ponteiros para buffers de dados não text ou matrizes de bytes binários sejam codificados com tipos de dados como LPBYTE ou LPWORD, em vez do tipo LPTSTR ou LPTCH.

  3. Declare ponteiros de tipo indeterminado explicitamente como ponteiros nulos usando LPVOID conforme apropriado.

  4. Torne o ponteiro independente de tipo aritmético. O uso de unidades de tamanho TCHAR gera variáveis que são 2 bytes se UNICODE for definido e 1 byte se UNICODE não estiver definido. Usar a aritmética de ponteiro sempre retorna o número de elementos indicados pelo ponteiro, independentemente de os elementos serem de 1 ou 2 bytes de tamanho. A expressão a seguir sempre recupera o número de elementos, independentemente de UNICODE ser definido.

    cCount = lpEnd - lpStart;
    

    A expressão a seguir determina o número de bytes usados.

    cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
    

    Não é necessário alterar uma instrução como a seguinte, pois o incremento do ponteiro aponta para o próximo elemento de caractere.

    chNext = *++lpText;
    
  5. Substitua cadeias de caracteres literais e constantes de caracteres de manifesto por macros. Altere expressões como a seguinte.

    while(*lpFileName++ != '\\')
    {
        // ...
    }
    

    Use a macro TEXT da seguinte maneira nesta expressão.

    while(*lpFileName++ != TEXT('\\'))
    {
        // ...
    }
    

    A macro TEXT faz com que as cadeias de caracteres sejam avaliadas como L"string" quando UNICODE for definido e como "cadeia de caracteres" caso contrário. Para facilitar o gerenciamento, mova cadeias de caracteres literais para recursos, especialmente se elas contiverem caracteres fora do intervalo ASCII (0x00 por meio de 0x7F) ou forem expostas na interface do usuário. Para dar suporte à localização de seu aplicativo para diferentes idiomas nacionais, é muito importante que todas as cadeias de caracteres de interface do usuário estejam em recursos localizáveis.

  6. Use as versões genéricas das funções do Windows. Para obter mais informações, consulte Convenções para protótipos de função.

  7. Use as versões genéricas das funções de cadeia de caracteres da biblioteca C padrão e lembre-se de definir "_UNICODE", bem como "UNICODE", conforme discutido no Standard C Functions.

  8. Se você estiver adaptando um aplicativo originalmente escrito para páginas de código do Windows, lembre-se de alterar qualquer código que dependa do 255 como o maior valor para um caractere.

Quando você compila o código que escreveu conforme descrito acima, o compilador pode criar versões de página de código Unicode e Windows do seu aplicativo da mesma origem. Dependendo das definições para UNICODE, as funções genéricas são resolvidas para produzir os mesmos arquivos binários que você escreveu código exclusivamente para Unicode ou exclusivamente para páginas de código do Windows.

Usando Conjuntos de Caracteres e Unicode