bonjour,
malgrès MSDN j ai pas trop compris __stdcall. Pourriez vous me dire a quel moment ce tag est il utilisé ?
merci
bonjour,
malgrès MSDN j ai pas trop compris __stdcall. Pourriez vous me dire a quel moment ce tag est il utilisé ?
merci
grosso modo, c'est la convention d'appel pour les API windows. Dépilage des paramètres de droite à gauche, ainsi ce sera compatible avec VB par exemple
La différence principale entre "normal" (généralement, "normal" signifie __cdecl) et __stdcall, c'est qu'en __stdcall, c'est la fonction appelée qui dépile les paramètres, et non pas la fonction appelante. C'est une optimisation en taille s'il y a beaucoup d'appels, mais on ne peut pas faire de fonction à nombre d'arguments variable avec ça.
De plus, je me demande si ça n'impacte pas un poil la performance parce que la fonction appelée ne peut pas retourner "directement".
Une autre convention d'appel est __fastcall, qui est comme __stdcall sauf que les deux premiers paramètres sont placés dans des registres. Ce n'est généralement pas utilisé dans l'API Windows, mais Borland en fait un usage massif.
En gros, pratiquement toutes les fonctions de l'API Windows sont en __stdcall, et les fonctions de la C Run-Time Library (CRT) sont en __cdecl. Une fonction écrite par l'utilisateur est en __cdecl si on ne précise pas autrement (ou si on ne change pas la convention d'appel par défaut dans les options du projet).
Dernière note, les macros comme WINAPI, PASCAL, STDCALL et CALLBACK correspondent à __stdcall sur un PC x86.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Partager