__stdcall

La __stdcall convention d’appel est utilisée pour appeler des fonctions d’API Win32. L’appelé propre la pile, de sorte que le compilateur effectue vararg des fonctions__cdecl. Les fonctions qui utilisent cette convention d’appel requièrent un prototype de fonction. Le __stdcall modificateur est spécifique à Microsoft.

Syntaxe

return-type__stdcallfunction-name[(argument-list)]

Notes

La liste suivante illustre l'implémentation de cette convention d'appel.

Élément Implémentation
Ordre de transmission des arguments De droite à gauche
Convention de passage d'argument Par valeur, à moins qu'un type pointeur ou référence soit passé.
Responsabilité de la maintenance de la pile La fonction appelée enlève ses propres arguments de la pile.
Convention de décoration de nom Un trait de soulignement (_) est précédé du nom. Le nom est suivi du signe at (@) suivi du nombre d’octets (en décimal) dans la liste d’arguments. Par conséquent, la fonction déclarée comme int func( int a, double b ) est décorée comme suit : _func@12
Convention de conversion de casse Aucun

L’option du compilateur /Gz spécifie pour toutes les fonctions non déclarées __stdcall explicitement avec une convention d’appel différente.

Pour la compatibilité avec les versions précédentes, _stdcall est un synonyme de __stdcall l’option /Za du compilateur (Désactiver les extensions de langage) spécifiée.

Les fonctions déclarées à l’aide du __stdcall modificateur retournent les valeurs de la même façon que les fonctions déclarées à l’aide __cdeclde .

Sur les processeurs ARM et x64, __stdcall est accepté et ignoré par le compilateur ; sur les architectures ARM et x64, par convention, les arguments sont passés dans les registres lorsque cela est possible, et les arguments suivants sont transmis sur la pile.

Pour les fonctions de classe non statiques, si la fonction est définie hors ligne, il n’est pas nécessaire de spécifier le modificateur de convention d’appel dans la définition hors ligne. En d’autres termes, pour les méthodes membres non statiques de classe, la convention d’appel spécifiée dans le cadre de la déclaration est utilisée par défaut au stade de la définition. Étant donné cette définition de classe,

struct CMyClass {
   void __stdcall mymethod();
};

this

void CMyClass::mymethod() { return; }

équivaut à ceci

void __stdcall CMyClass::mymethod() { return; }

Exemple

Dans l’exemple suivant, l’utilisation de résultats dans tous les WINAPI types de __stdcall fonctions gérés en tant qu’appel standard :

// Example of the __stdcall keyword
#define WINAPI __stdcall
// Example of the __stdcall keyword on function pointer
typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);

Voir aussi

Passage des arguments et conventions de dénomination
Mots clés