__thiscall

La convention d’appel spécifique à__thiscall Microsoft est utilisée sur les fonctions membres de classe C++ sur l’architecture x86. Il s’agit de la convention d’appel par défaut utilisée par les fonctions membres qui n’utilisent pas d’arguments de variable (vararg fonctions).

Sous __thiscall, l’appelé propre la pile, qui est impossible pour vararg les fonctions. Les arguments sont poussés sur la pile de droite à gauche. Le this pointeur est transmis via l’inscription ECX, et non sur la pile.

Sur les ordinateurs ARM, ARM64 et x64, __thiscall sont acceptés et ignorés par le compilateur. C’est parce qu’ils utilisent par défaut une convention d’appel basée sur un registre.

L’une des raisons d’utiliser __thiscall se trouve dans les classes dont les fonctions membres utilisent __clrcall par défaut. Dans ce cas, vous pouvez utiliser __thiscall pour rendre les fonctions membres individuelles pouvant être appelées à partir du code natif.

Lors de la compilation avec /clr:pure, toutes les fonctions et pointeurs de fonction sont __clrcall sauf indication contraire. Les /clr:pure options du compilateur et /clr:safe des options sont déconseillées dans Visual Studio 2015 et non prises en charge dans Visual Studio 2017.

vararg les fonctions membres utilisent la convention d’appel __cdecl . Tous les arguments de fonction sont envoyés (push) sur la pile, avec le this pointeur placé sur la pile en dernier.

Étant donné que cette convention d’appel s’applique uniquement à C++, elle n’a pas de schéma de décoration de nom C.

Lorsque vous définissez une fonction membre de classe non statique hors ligne, spécifiez le modificateur de convention d’appel uniquement dans la déclaration. Vous n’avez pas besoin de le spécifier à nouveau sur la définition hors ligne. Le compilateur utilise la convention d’appel spécifiée pendant la déclaration au point de définition.

Voir aussi

Conventions de passage et d’affectation de noms des arguments