__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
__stdcall
function-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 __cdecl
de .
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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : tout au long de 2024, nous allons éliminer 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, consultez :Envoyer et afficher des commentaires pour