Sdílet prostřednictvím


__stdcall

Specifické pro Microsoft

Konvence volání __stdcall je použita k volání funkce rozhraní Win32 API.Volaný vyčistí zásobník, aby mohl kompilátor provést u vararg funkce __cdecl.Funkce, které používají konvenci volání k vyžadování prototypu funkce.

return-type __stdcall function-name[(argument-list)]

Poznámky

Následující seznam ukazuje implementaci této konvence volání.

Element

Implementace

Pořadí předávání argumentů

Zprava doleva.

Konvence předávání argumentů

Podle hodnoty, pokud je předán typ ukazatele nebo odkazu.

Odpovědnost za údržbu zásobníku

Volaná funkce vezme argumenty ze zásobníku.

Konvence pro vzhled názvu

Podtržítko (_) je součástí předpony názvu.Následuje je zakončen symbolem (@) následovaným počtem bajtů (v desítkové soustavě) v seznamu argumentů.Proto je funkce deklarovaná jako int func( int a, double b ) upravena takto: _func@12

Úmluva překladu případu

Žádná

Možnost kompilátoru /Gz určuje __stdcall pro všechny funkce, které nejsou explicitně deklarovány pomocí jiné konvence volání.

Funkce, které jsou deklarovány pomocí modifikátoru __stdcall se vrátí stejným způsobem jako funkce, které jsou deklarovány pomocí __cdecl.

Na procesorech ARM a x64 je klíčové slovo __stdcall přijato a ignorováno kompilátory; v architekturách ARM a x64 jsou podle úmluvy argumenty předány v registrech, pokud je to možné, a další argumenty jsou předány do zásobníku.

U funkcí nestatické třídy je-li funkce definovaná mimo řádek, volající konvenční modifikátor nemusí být stanoven na definici mimo řádek.To znamená, že pro členské nestatické metody třídy se konvence volání zadaná během deklarace přejme během definice.Při této definici třídy,

struct CMyClass {
   void __stdcall mymethod();
};

toto

void CMyClass::mymethod() { return; }

je ekvivalentem tohoto

void __stdcall CMyClass::mymethod() { return; }

Příklad

V následujícím příkladu má použití __stdcall za následek zpracování všech typů funkcí WINAPI 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, ...);

Viz také

Referenční dokumentace

Konvence předávání a pojmenování argumentů

Klíčová slova jazyka C++