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