__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();
};