161 votes

Ce qui est __stdcall ?

J’apprends sur la programmation Win32 et les `` prototype ressemble à :

J’étais confus quant à ce que cela `` identificateur était pour et trouvé :

Que fait cela ? Je suis confus par ce avoir quelque chose du tout après un type de retour. Ce qui est `` pour ? Que signifie quand il y a quelque chose entre le type de retour et le nom de la fonction ?

188voto

Rob Walker Points 25840

__stdcall est la convention d'appel utilisée pour la fonction. Elle indique au compilateur de règles qui s'appliquent pour la mise en place de la pile, en poussant des arguments et d'obtenir une valeur de retour.

Il y a un certain nombre d'autres conventions d'appel, __cdecl, __thiscall, __fastcall et merveilleusement nommé __nus. __stdcall est la convention d'appel standard pour Win32, les appels système.

Wikipédia couvre les détails.

Principalement à des questions lorsque vous appelez une fonction à l'extérieur de votre code (par exemple, un OS API) ou de l'OS vous appelle (comme c'est le cas ici avec WinMain). Si le compilateur ne sait pas la bonne convention d'appel, alors vous obtiendrez probablement très étrange se bloque, comme la pile ne sera pas gérée correctement.

41voto

C ou C++ lui-même ne définit pas ces identifiants. Ils sont compilateur extensions et stand pour certaines conventions d'appel. Qui détermine où mettre les arguments, dans quel ordre, où la fonction appelée trouverez l'adresse de retour, et ainsi de suite. Par exemple, __fastcall signifie que les arguments des fonctions sont transmis à travers les registres.

L' Article de Wikipédia donne un aperçu des différentes conventions d'appel trouvé là-bas.

22voto

MovEaxEsp Points 161

Les réponses jusqu’ici ont porté sur les détails, mais si vous ne comptez pas tomber vers le bas à l’Assemblée, vous devez savoir est que tant l’appelant et l’appelé doivent utiliser la convention d’appel même, sinon vous aurez des bogues qui sont difficiles à trouver.

12voto

Windows programmer Points 5365

Je suis d'accord que toutes les réponses sont correctes, mais voici la raison. Microsoft compilateurs C et C++ de fournir des diverses conventions d'appel (prévu) de la vitesse d'appels de fonction au sein d'une application en C et C++ fonctions. Dans chaque cas, l'appelant et l'appelé doit nous mettre d'accord sur convention d'appel à utiliser. Maintenant, Windows lui-même fournit des fonctions (Api), et celles qui ont déjà été compilé, donc quand vous les appelez, vous devez vous conformer à eux. Tous les appels à l'Api Windows, et des rappels à partir de Windows Api, doit utiliser le __stdcall convention.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X