__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, ...);