ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 27 déc. 2004 à 17:59
vecchio56 : __stdcall ne marche justement pas avec un nombre variable d'argument vu que c'est la fonction appelée qui se charge de dépiler les paramètres (il faut donc lui passer le bon nombre). c'est __cdecl qui permet un nombre quelconque d'argument car c'est la fonction appellante qui se chargera de dépiler (elle sait donc combien elle a empiler de paramètres)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 27 déc. 2004 à 17:23
Le passage des paramètres se fait sur la pile, de droite à gauche, et la fonction appelée est chargée de dépiler ses paramètres.
__stdcall implique aussi qu'une fontion f dont la somme des taille des arguments est N s'appellera _f@N, par exemple _f@4 pour une fonction du type void __stdcall f(DWORD d)
Vous n’avez pas trouvé la réponse que vous recherchez ?
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 27 déc. 2004 à 17:39
C'est obligatoire pour les fonction a nombre d'arguments variable (printf). Et a quoi ca sert? De toute facon il faut bien choisir une méthode pour le passage des paramètres
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 27 déc. 2004 à 18:44
vecchio56> __stdcall laisse le "dépillage" des parametrès aux bon soin de la fonction appellé. La fonction appellé n'a aucun moyen de connnaitre le nombre de paramètres passé a la pile.
A l'inverse, __cdecl oblige la fonction appellante a dépiller elle meme les parametres qu'elle passe sur la pile.
Ainsi tu peux créer des fonctions à un paramètres variables.
En gros ce qu'il faut retenir c'est que dans le cas d'une fonction a parametres variables, il n'y a que la fonction appellante qui connait le nombre de paramètres passé, d'ou l'attribut __cdecl.
Je pense ne pas mettre trompé, mais si c'est le cas .... bah corrigez moi.