Tipos de dados do Windows para cadeias de caracteres

A maioria das operações de cadeia de caracteres pode usar a mesma lógica para Unicode e para páginas de código Windows. A única diferença é que a unidade básica da operação é um caractere de 16 bits (também conhecido como caractere largo) para Unicode e um caractere de 8 bits para Windows páginas de código. Os arquivos de cabeçalho Windows fornecem várias definições de tipo que facilitam a criação de fontes que podem ser compiladas para Unicode ou para páginas de código Windows.

Windows dá suporte a três conjuntos de tipos de dados de caracteres e cadeias de caracteres: um conjunto de definições de tipo genérico que podem ser compiladas para páginas de código Unicode ou Windows e dois conjuntos de definições de tipo específicas. Um conjunto de definições de tipo específicas é para uso com Unicode e o outro é para uso com Windows páginas de código.

Um aplicativo que usa tipos de dados genéricos pode ser compilado para Unicode simplesmente definindo "UNICODE" antes das instruções #include para os arquivos de cabeçalho ou durante a compilação. Novos aplicativos de Windows devem usar o Unicode para evitar as inconsistências de páginas de código variadas e simplificar a localização. Eles devem ser gravados com tipos de dados genéricos e devem definir "UNICODE" para compilar esses tipos em tipos Unicode. Nos poucos locais em que um aplicativo deve trabalhar com dados de caracteres de 8 bits, ele pode fazer uso explícito dos tipos para Windows páginas de código.

A capacidade de compilar os tipos genéricos em tipos para Windows páginas de código existe principalmente para dar suporte a aplicativos herdados. Para compilar para Windows páginas de código, o aplicativo apenas omite a definição UNICODE.

O exemplo a seguir mostra o método usado nos arquivos de cabeçalho Windows para definir os três conjuntos de tipos de dados. Para a implementação, consulte o arquivo de cabeçalho Winnt.h.

// Generic types

#ifdef UNICODE
    typedef wchar_t TCHAR;
#else
    typedef unsigned char TCHAR;
#endif

typedef TCHAR *LPTSTR, *LPTCH;

// 8-bit character specific

typedef unsigned char CHAR;
typedef CHAR *LPSTR, *LPCH;

// Unicode specific (wide characters)

typedef unsigned wchar_t WCHAR;
typedef WCHAR *LPWSTR, *LPWCH;

A letra "T" em uma definição de tipo, por exemplo, TCHAR ou LPTSTR, designa um tipo genérico que pode ser compilado para Windows páginas de código ou Unicode. A letra "W" em uma definição de tipo, por exemplo, WCHAR ou LPWSTR, designa um tipo Unicode. Como Windows páginas de código são do formulário mais antigo, elas têm definições de tipo simples, como CHAR e LPSTR. Para obter uma descrição completa dos tipos de dados em Windows, consulte Windows Tipos de Dados.

Unicode na API do Windows