__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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour