2010-02-27 10 views
38

Pourriez-vous m'expliquer le mot WINAPI dans la fonction WinMain()?Que signifie "WINAPI" dans la fonction principale?

Dans la façon la plus simple ..

#include <windows.h> 

int -->WINAPI<-- WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
{ 
    MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK); 
    return 0; 
} 

Est-il juste un peu en mode branché de Windows?

Que fait-il? Ou plutôt quelle est cette fonctionnalité C++ que je n'ai pas encore rencontrée?

Répondre

43

WINAPI est une macro qui évalue à __stdcall, un mot-clé spécifique à Microsoft qui spécifie une convention d'appel où l'appelé nettoie la pile. L'appelant et l'appelé de la fonction doivent se mettre d'accord sur une convention d'appel pour éviter de corrompre la pile.

+2

alors pourquoi est-ce à cet endroit précis? ne pourraient-ils pas donner la macro une ligne ci-dessus? – Pyjong

+3

Le mot-clé de la convention d'appel passe entre le type de retour et le nom de la fonction car c'est ainsi que quelqu'un travaillant sur un compilateur C l'a défini il y a de nombreuses années. Je ne connais pas le raisonnement derrière la syntaxe, ni même quel compilateur a été le premier à prendre en charge la spécification des conventions d'appel (cdecl, pascal, fortran, etc.). Microsoft? Borland? Treillis? Autre chose? – bk1e

5

Ceci est une définition de macro destinée à désigner la convention d'appel de Windows. De MSDN:

La façon dont le nom est décoré dépend de la langue et la façon dont le compilateur est chargé de rendre la fonction disponible, à savoir la convention d'appel . La convention d'appel inter-processus standard pour Windows utilisée par les DLL est connue sous le nom de convention WinAPI . Il est défini dans les fichiers d'en-tête Windows comme WINAPI, qui est défini dans à l'aide du déclarant Win32 __stdcall.

2

Il est spécifique à Windows. Il spécifie la convention d'appel. WinMain est appelé par Windows, ce qui garantit que l'appelant et l'appelé sont d'accord sur la convention d'appel.