__thiscall
Spécifique à Microsoft
La convention d'appel d' __thiscall est utilisé sur les fonctions membres et est la convention d'appel par défaut utilisée par les fonctions membres C++ qui n'utilisent pas d'arguments variables.Sous __thiscall, l'appelé nettoie la pile, qui est impossible pour les fonctions d' vararg .Les arguments sont l'objet d'un push sur la pile de droite à gauche, avec le pointeur d' this passé via le registre ECX, et non sur la pile, sur l'architecture x86.
une raison d'utiliser __thiscall est dans les classes dont les fonctions membres utilisent __clrcall par défaut.Dans ce cas, vous pouvez utiliser __thiscall pour rendre différentes fonctions membres pouvant être appelées de code natif.
Lors de la compilation avec /clr : pure, tous les fonctions et pointeurs fonction sont __clrcall sauf indication contraire.
Dans les versions antérieures à Visual C++ 2005, la convention d'appel de thiscall ne peut pas être spécifiée explicitement dans un programme, car thiscall n'est pas un mot clé.
les fonctions membres d'vararg utilisent la convention d'appel d' __cdecl .Tous les arguments de fonction font l'objet d'un push sur la pile, avec le pointeur d' this placé sur le bout de pile
Étant donné que cette convention d'appel s'applique uniquement à C++, il n'y a aucun modèle de décoration de nom C.
sur la famille de processeurs Itanium (IPF) et les ordinateurs de x64 , __thiscall est reçu et ignoré par le compilateur ; sur un processeur IPF, par convention, les paramètres sont passés dans le registre.
Pour les fonctions de classe non statiques, si la fonction est hors ligne défini, le modificateur de la convention d'appel ne doit pas être spécifié dans la définition hors ligne.Autrement dit, pour les méthodes de membre non statique de classe, la convention d'appel spécifiée lors de la déclaration est censée être au point de définition.
Exemple
// thiscall_cc.cpp
// compile with: /c /clr:oldSyntax
struct CMyClass {
void __thiscall mymethod();
void __clrcall mymethod2();
};