2010-02-27 21 views
38

Potrebbe spiegarmi la parola WINAPI nella funzione WinMain()?Che cosa significa "WINAPI" nella funzione principale?

nel modo più semplice ..

#include <windows.h> 

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

è solo un po 'di funky modalità di Windows?

Cosa fa? O meglio, cos'è questa caratteristica C++ che non ho ancora incontrato?

risposta

43

WINAPI è una macro che restituisce __stdcall, una parola chiave specifica di Microsoft che specifica una convenzione di chiamata in cui il destinatario cancella lo stack. Il chiamante e il chiamato della funzione devono concordare una convenzione di chiamata per evitare di corrompere lo stack.

+2

quindi perché è in questo posto specifico? non potrebbero dare la macro una riga sopra? – Pyjong

+3

La parola chiave della convenzione di chiamata va tra il tipo restituito e il nome della funzione perché è così che qualcuno che lavora su un compilatore C l'ha definita molti anni fa. Non conosco il ragionamento alla base della sintassi, o anche quale compilatore è stato il primo a supportare la specifica delle convenzioni di chiamata (cdecl, pascal, fortran, ecc.). Microsoft? Borland? Reticolo? Qualcos'altro? – bk1e

5

Questa è una definizione di macro destinato a designare la convenzione di chiamata di Windows. Da MSDN:

Il modo in cui il nome è decorato dipende sulla lingua e come il compilatore è incaricato di far funzionare disponibili, vale a dire, la chiama convenzione. La convenzione di chiamata standard inter-process per Windows utilizzata dalle DLL è nota come convenzione WinAPI . È definito nei file di intestazione di Windows come WINAPI, definito nel turno utilizzando il dichiaratore Win32 __stdcall.

2

È specifico per Windows. Specifica la convenzione di chiamata. WinMain viene chiamato da Windows e ciò garantisce che il chiamante e il chiamante concordino sulla convenzione di chiamata.