Partilhar via


__stdcall

Específicos do Microsoft

O __stdcall convenção de chamada é usada para chamar funções da API do Win32.O receptor limpa a pilha, portanto, faz com que o compilador vararg funções __cdecl.Funções que usam essa convenção de chamada exigem um protótipo de função.

return-type __stdcall function-name[(argument-list)]

Comentários

A lista a seguir mostra a implementação dessa convenção de chamada.

Elemento

Implementação

Ordem de passagem de argumento

Direita para a esquerda.

Convenção de passagem de argumento

Por valor, a menos que um tipo de ponteiro ou uma referência é passado.

Responsabilidade de manutenção de pilha

Chamada de função pops seus próprios argumentos da pilha.

Convenção de nome-decoration.

Um caractere de sublinhado (_) é o prefixo do nome.O nome for seguido de arroba (@) seguido do número de bytes (em decimal) na lista de argumentos.Portanto, a função declarada como int func( int a, double b ) está decorado da seguinte maneira:_func@12

Convenção de tradução de caso

Nenhum

O /Gz Especifica a opção de compilador __stdcall para todas as funções não explicitamente declaradas com uma convenção de chamada diferente.

Funções declaradas usando a __stdcall da mesma maneira que as funções declaradas usando valores de retorno do modificador _ _ cdecl.

Na família de processadores Itanium (IPF) e processadores x64, __stdcall é aceito e ignorado pelo compilador; no IPF, por convenção, parâmetros são passados no registro.

Para funções de classe non-static, se a função é definida de fora de linha, o modificador de convenção de chamada não tem a ser especificado na definição de out-of-line.Ou seja, para métodos de membro não estático da classe, será adotada a convenção de chamada especificada durante a declaração no momento da definição.Dada a definição de classe,

struct CMyClass {
   void __stdcall mymethod();
};

Isso

void CMyClass::mymethod() { return; }

é equivalente a isso

void __stdcall CMyClass::mymethod() { return; }

Exemplo

No exemplo a seguir, use de _ _stdcall resulta em todas as WINAPI tipos de função que está sendo tratado como uma chamada de padrão:

// Example of the __stdcall keyword
#define WINAPI __stdcall
// Example of the __stdcall keyword on function pointer
typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Consulte também

Referência

Argumento passando e convenções de nomenclatura

Palavras-chave C++