__stdcall
Konkrétní společnosti Microsoft
__stdcall Konvence volání se používá při volání funkcí rozhraní API systému Win32.Volaný čistí zásobníku, takže provede kompilátor vararg funkce __cdecl.Funkce, které používají tuto konvenci volání vyžadují funkce prototypu.
return-type __stdcall function-name[(argument-list)]
Poznámky
Následující seznam zobrazuje provádění této konvence volání.
Element |
Implementace |
---|---|
Předávání argument pořadí |
Zprava doleva. |
Argument předávání úmluvy |
Podle hodnoty Pokud je předán odkaz nebo ukazatele typu. |
Údržba zásobníku odpovědnost |
Vlastní argumenty nazývá POP funkce ze zásobníku. |
Úprava názvu úmluvy |
Název má předponu podtržítko (_).Následuje název znak zavináče (@ následuje počet bajtů (v desítkové soustavě) v seznamu argumentů).Proto funkce deklarované jako int func( int a, double b ) je upraven takto:_func@12 |
Případ překlad úmluvy |
Žádná |
/Gz určuje volba kompilátoru __stdcall pro všechny funkce, které nejsou explicitně deklarovány s jinou konvenci volání.
Funkce deklarované pomocí __stdcall modifikátor návratové hodnoty stejným způsobem jako funkce deklarované pomocí __cdecl.
Na procesor řady Itanium (IPF) a x 64 procesorů __stdcall přijat a ignorován kompilátorem; na IPF úmluvou, parametry jsou předány do rejstříku.
Funkce nestatický třídy Pokud je funkce definovaná mimo řádku, volající modifikátor úmluvy nemá stanovené na definici konce řádku.K nestatickému členu metody třídy, je konvence volání zadané během prohlášení se předpokládá na místě z definice.Tato definice třídy uveden
struct CMyClass {
void __stdcall mymethod();
};
to
void CMyClass::mymethod() { return; }
odpovídá to
void __stdcall CMyClass::mymethod() { return; }
Příklad
V následujícím příkladu slouží __stdcall výsledky ve všech WINAPI funkce typy jsou zpracovány jako standardní volání:
// 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, ...);