__stdcall
Specifici di Microsoft
__stdcall la convenzione di chiamata viene utilizzata per chiamare le funzioni API Win32.Il chiamato pulizia dello stack, pertanto il compilatore fa vararg funzioni __cdecl.Le funzioni che utilizzano la convenzione di chiamata richiedono un prototipo di funzione.
return-type __stdcall function-name[(argument-list)]
Note
Nell'elenco riportato di seguito viene illustrata l'implementazione di questa convenzione di chiamata.
Elemento |
Implementazione |
---|---|
Argomento-passaggio l'ordine |
Da destra a sinistra. |
Argomento-passaggio la convenzione |
Per valore, a meno che un puntatore o un tipo di riferimento venga passato. |
responsabilità di Stack-manutenzione |
La funzione chiamata estrae i propri argomenti dallo stack. |
Convenzione della decorazione dei nomi |
Un carattere di sottolineatura (_) è preceduta al nome.Il nome è seguito dal simbolo @ seguito dal numero di byte (decimale) nell'elenco di argomenti.Pertanto, la funzione dichiarata come int func( int a, double b ) verrà decorata come segue: _func@12 |
Convenzione della conversione maiuscolo/minuscolo |
Nessuno |
/Gz l'opzione del compilatore specifica __stdcall per tutte le funzioni non dichiarate in modo esplicito con una convenzione di chiamata diverso.
Funzioni dichiarate con l'. __stdcall valori restituiti che il modificatore in modo analogo alle funzioni ha dichiarato utilizzando __cdecl.
La famiglia di (IPF) processori Itanium e nei processori x64, __stdcall viene accettato e ignorato dal compilatore, sull'IPF, per convenzione, i parametri vengono passati nel registro.
Per le funzioni di classe non statica, se la funzione è non inline definita, il modificatore della convenzione di chiamata non è necessario specificarlo nella definizione non inline.Ovvero per i metodi del membro non statico della classe, la convenzione di chiamata specificata durante la dichiarazione è nota al momento della definizione.Specificando questa definizione della classe,
struct CMyClass {
void __stdcall mymethod();
};
this
void CMyClass::mymethod() { return; }
equivale a questo
void __stdcall CMyClass::mymethod() { return; }
Esempio
Nell'esempio seguente, l'utilizzo distdcall risultati in tutto WINAPI tipi di funzione che vengono gestiti come chiamata standard:
// Example of the __stdcall keyword
#define WINAPI __stdcall
// Example of the __stdcall keyword on function pointer
typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);