Compartilhar via


Convenções para protótipos de função

O SDK do Windows fornece protótipos de função em versões genéricas página de código do Windowse Unicode. Os protótipos podem ser compilados para produzir protótipos de página de código do Windows ou protótipos Unicode. Todos os três protótipos são discutidos neste tópico e ilustrados por exemplos de código para a funçãoSetWindowText.

Veja a seguir um exemplo de um protótipo genérico.

BOOL SetWindowText(
  HWND hwnd,
  LPCTSTR lpText
);

O arquivo de cabeçalho fornece o nome da função genérica implementado como uma macro.

#ifdef UNICODE
#define SetWindowText SetWindowTextW
#else
#define SetWindowText SetWindowTextA
#endif // !UNICODE

O pré-processador expande a macro para a página de código do Windows ou o nome da função Unicode. A letra "A" (ANSI) ou "W" (Unicode) é adicionada no final do nome da função genérica, conforme apropriado. O arquivo de cabeçalho fornece dois protótipos específicos, um para páginas de código do Windows e outro para Unicode, conforme mostrado nos exemplos a seguir.

BOOL SetWindowTextA(
  HWND hwnd,
  LPCSTR lpText
);
BOOL SetWindowTextW(
  HWND hwnd,
  LPCWSTR lpText
);

Conforme explicado em tipos de dados do Windows para cadeias de caracteres, o protótipo de função genérica usa o tipo de dados LPCTSTR para o parâmetro de texto. No entanto, o protótipo da página de código do Windows usa o tipo LPCSTR e o protótipo Unicode usa LPCWSTR.

Para todas as funções com argumentos de texto, os aplicativos normalmente devem usar os protótipos de função genérica. Se um aplicativo definir "UNICODE" antes das instruções #include para os arquivos de cabeçalho ou durante a compilação, as instruções serão compiladas em funções Unicode.

Nota

Novos aplicativos do Windows devem usar o Unicode para evitar inconsistências de páginas de código variadas e para facilitar a localização. Elas devem ser escritas com funções genéricas e devem definir UNICODE para compilar as funções em funções Unicode. Nos poucos lugares em que um aplicativo deve trabalhar com dados de caractere de 8 bits, ele pode fazer uso explícito das funções para páginas de código do Windows.

 

Seu aplicativo sempre deve usar um protótipo de função genérica com os tipos genéricos de cadeia de caracteres e cadeia de caracteres. Todos os nomes de função que terminam com um "W" maiúsculo usam Unicode, ou seja, caractere largo, parâmetros. Algumas funções existem apenas em versões Unicode e só podem ser usadas com os tipos de dados apropriados. Por exemplo, LCIDToLocaleName e LocaleNameToLCID têm apenas versões Unicode.

A seção Requisitos na documentação de referência para cada função unicode e conjunto de caracteres fornece informações sobre as versões de função implementadas por sistemas operacionais com suporte. Se uma linha que começa com "Unicode" for incluída, a função terá versões de página de código Unicode e Windows separadas.

Nota

Quando uma função tem um parâmetro de comprimento para uma cadeia de caracteres, o comprimento deve ser documentado como uma contagem de valores TCHAR na cadeia de caracteres. Esse tipo de dados refere-se a bytes para versões de página de código do Windows da função ou palavras de 16 bits para versões Unicode. No entanto, funções que exigem ou retornam ponteiros para blocos de memória não tipados, como a função GlobalAlloc, geralmente assumem um tamanho em bytes, independentemente do protótipo usado. Se a alocação de memória não tipada for para uma cadeia de caracteres, o aplicativo deverá multiplicar o número de caracteres por tamanho(TCHAR). Para obter informações adicionais, consulte Usando tipos de dados genéricos.

 

Unicode no da API do Windows