Compartilhar via


__thiscall

Específicos do Microsoft

O __thiscall convenção de chamada é usada em funções de membro e é a convenção de chamada padrão usada por funções de membro C++ que não usam argumentos variáveis.Em __thiscall, o receptor limpa a pilha, o que é impossível para vararg funções.Argumentos são colocados no empilhamento da direita para a esquerda, com o this ponteiro sendo passado via registrador ECX e não na pilha, na arquitetura x86.

Um dos motivos para usar __thiscall está em uso de funções cujo membro de classes __clrcall por padrão.Nesse caso, você pode usar __thiscall para tornar membro individual as funções podem ser chamados a partir do código nativo.

Durante a compilação com /clr: puro, todas as funções e os ponteiros de função são __clrcall , a menos que especificado em contrário.

Em versões antes de Visual C++ 2005, a thiscall convenção de chamada não pôde ser explicitamente especificado em um programa, pois thiscall não era uma palavra-chave.

vararguso de funções de membro do __cdecl convenção de chamada.Todos os argumentos de função são colocados na pilha, com o this ponteiro colocadas por último na pilha

Porque esta convenção de chamada se aplica somente a C++, não há nenhum esquema de decoração de nome C.

Na família de processadores Itanium (IPF) e x64 máquinas, __thiscall é aceito e ignorado pelo compilador; em um chip 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.

Exemplo

// thiscall_cc.cpp
// compile with: /c /clr:oldSyntax
struct CMyClass {
   void __thiscall mymethod();
   void __clrcall mymethod2();
};

Consulte também

Referência

Argumento passando e convenções de nomenclatura