Compartilhar via


__thiscall

Específico da Microsoft

A convenção de chamada __thiscall é usada em funções membro e é a convenção de chamada padrão usada por funções membro do C++ que não usam argumentos variáveis. Sob __thiscall, o receptor limpa a pilha, o que é impossível para funções vararg. Os argumentos são enviados por push na pilha da direita para a esquerda, com o ponteiro this passado por meio do registro de ECX, e não na pilha, na arquitetura x86.

Uma razão para usar __thiscall está em classes cujas funções membro usam __clrcall por padrão. Nesse caso, você pode usar __thiscall para tornar funções membro individuais a partir de código nativo.

Ao compilar com /clr:pure, todas as funções e ponteiros de função são __clrcall, exceto se especificada de outra forma.

Nas versões anteriores do Visual C++ 2005, a convenção de chamada thiscall não podia ser especificada explicitamente em um programa, pois thiscall não era uma palavra-chave.

As funções membro vararg usam a convenção de chamada __cdecl. Todos os argumentos de função são enviadas por push na pilha, com o ponteiro this posicionado na última pilha

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

Em computadores ARM e x64, __thiscall é aceito e ignorado pelo compilador.

Para funções de classe não estáticas, se a função for definida como fora da linha, o modificador da convenção de chamada não precisa ser especificado na definição fora da linha. Ou seja, para métodos de membro de classe não estática, a convenção de chamada especificada durante a declaração é assumida no ponto de definição.

Exemplo

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

Consulte também

Referência

Passagem de argumento e convenções de nomenclatura