__thiscall
A convenção de chamada específica da Microsoft__thiscall
é usada em funções de membro da classe C++ na arquitetura x86. É a convenção de chamada padrão usada por funções de membro que não usam argumentos variáveis (funções vararg
).
Sob __thiscall
, o receptor limpa a pilha, o que é impossível para funções vararg
. Os argumentos são enviados por push para a pilha da direita para a esquerda. O ponteiro this
é passado por meio do registro ECX, não na pilha.
Em computadores ARM, ARM64 e x64, __thiscall
é aceito e ignorado pelo compilador. Isso ocorre porque eles usam uma convenção de chamada baseada em registro por padrão.
Uma razão para usar __thiscall
está em classes cujas funções de membro usam __clrcall
por padrão. Nesse caso, você pode usar __thiscall
para tornar funções de membro individuais com base em 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. As opções do compilador /clr:pure
e /clr:safe
foram preteridas no Visual Studio 2015 e são incompatíveis com o Visual Studio 2017.
As funções de 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 essa convenção de chamada se aplica apenas a C++, não há nenhum esquema de decoração de nome C.
Quando você define uma função de membro de classe não estática fora de linha, especifique o modificador de convenção de chamada apenas na declaração. Você não precisa especificá-lo novamente na definição fora de linha. O compilador usa a convenção de chamada especificada durante a declaração no ponto de definição.
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de