Convenções para protótipos de funções
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 são ilustrados por exemplos de código para o função SetWindowText.
Segue-se 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 implementada 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 para 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 Windows Data Types for Strings, o protótipo de função genérica usa o tipo de dados LPCTSTR para o parâmetro text. No entanto, o protótipo da página de código do Windows usa o tipo LPCSR 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éricos. 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.
Observação
Novos aplicativos do Windows devem usar Unicode para evitar as inconsistências de páginas de código variadas e para facilitar a localização. Eles devem ser escritos com funções genéricas e devem definir UNICODE para compilar as funções em funções Unicode. Nos poucos lugares onde um aplicativo deve trabalhar com dados de caracteres de 8 bits, ele pode fazer uso explícito das funções para páginas de código do Windows.
Seu aplicativo deve sempre usar um protótipo de função genérica com os tipos genéricos de cadeia de caracteres e caracteres. Todos os nomes de funções que terminam com um "W" maiúsculo usam parâmetros Unicode, ou seja, caracteres largos. Algumas funções existem apenas em versões Unicode e podem ser usadas apenas 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 pelos sistemas operacionais suportados. Se uma linha que começa com "Unicode" estiver incluída, a função terá versões separadas de página de código Unicode e Windows.
Observação
Quando uma função tem um parâmetro length para uma cadeia de caracteres, o comprimento deve ser documentado como uma contagem de valores TCHAR na cadeia de caracteres. Este 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, as funções que exigem ou retornam ponteiros para blocos de memória não tipados, como a funçãoGlobalAlloc, geralmente têm 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 deve multiplicar o número de caracteres por sizeof(TCHAR). Para obter informações adicionais, consulte Usando tipos de dados genéricos.
Tópicos relacionados