Partager via


__stdcall

Spécifique à Microsoft

La convention d'appel d' __stdcall est utilisée pour appeler des fonctions API Win32.L'appelé nettoie la pile, le compilateur effectue des fonctions __cdeclde vararg .Fonctions qui utilisent cette convention d'appel requièrent un prototype de fonction.

return-type __stdcall function-name[(argument-list)]

Notes

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

Élément

Implémentation

Argument-passer la commande

De droite à gauche.

Argument-passer la convention

Par valeur, à moins qu'un pointeur ou un type référence est passé.

responsabilité de Pile-maintenance

La fonction appelée apparaît ses propres arguments de la pile.

convention de décoration de nom

Un trait de soulignement (_) est préfixé avec le nom.Le nom est suivi par l'arobase (@) suivi du nombre d'octets (au format 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 de /Gz spécifie __stdcall pour toutes les fonctions pas explicitement déclarées avec une convention d'appel différente.

Fonctions déclarées à l'aide de les valeurs de retour de modificateur d' __stdcall que la même façon que les fonctions a déclarées à l'aide de __cdecl.

sur la famille de processeurs Itanium (IPF) et les processeurs x64, __stdcall est reçu et ignoré par le compilateur ; sur 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.donné cette définition de classe,

struct CMyClass {
   void __stdcall mymethod();
};

this

void CMyClass::mymethod() { return; }

équivaut à cela

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

Exemple

Dans l'exemple suivant, utilisez des résultats destdcall de dans tous les types de fonction d' WINAPI qui est géré comme un 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

Référence

Passage et conventions d'affectation de noms d'argument

Mots clés C++