Share via


__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, ...);

Vedere anche

Riferimenti

Passaggio e convenzioni di denominazione dell'argomento

Parole chiave C++