bonjour,
malgrès MSDN j ai pas trop compris __stdcall. Pourriez vous me dire a quel moment ce tag est il utilisé ?
merci
Version imprimable
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.