IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

[microsoft specific] __stdcall


Sujet :

Visual C++

  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [microsoft specific] __stdcall
    bonjour,

    malgrès MSDN j ai pas trop compris __stdcall. Pourriez vous me dire a quel moment ce tag est il utilisé ?

    merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    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

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Merci de consulter le support Microsoft
    Par Community Management dans le forum Windows
    Réponses: 5
    Dernier message: 01/09/2014, 00h31
  2. Quel SGBD choisir : Oracle ou Microsoft SQL-Server ?
    Par dellibmdell dans le forum Décisions SGBD
    Réponses: 94
    Dernier message: 06/03/2013, 23h42
  3. [Débat] Choisir InterBase/Firebird ou Microsoft SQL-SERVER ?
    Par asenaici dans le forum Décisions SGBD
    Réponses: 90
    Dernier message: 19/03/2009, 20h51
  4. Réponses: 5
    Dernier message: 15/12/2005, 20h16
  5. Réponses: 5
    Dernier message: 20/08/2002, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo