Share via


__stdcall

Konvence __stdcall volání se používá k volání funkcí rozhraní API Win32. Volaný zásobník vyčistí, takže kompilátor dělá vararg funkce __cdecl. Funkce, které používají tuto konvenci volání, vyžadují prototyp funkce. __stdcall Modifikátor je specifický pro Microsoft.

Syntaxe

return-type__stdcallfunction-name[(argument-list)]

Poznámky

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

Element (Prvek) Implementace
Pořadí předávání argumentů Zprava doleva.
Konvence předávání argumentů Podle hodnoty, pokud není předán ukazatel nebo typ odkazu.
Odpovědnost za údržbu zásobníku Volané funkce zobrazí vlastní argumenty ze zásobníku.
Konvence pro vzhled názvu Podtržítko (_) má před název. Za názvem následuje znak at (@) následovaný počtem bajtů (v desítkové soustavě) v seznamu argumentů. Proto je funkce deklarována takto int func( int a, double b ) : _func@12
Konvence pro posunutí Žádné

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

Kvůli kompatibilitě s předchozími verzemi _stdcall je synonymem, pokud __stdcall není zadána možnost /Za kompilátoru (Zakázat jazyková rozšíření ).

Funkce deklarované pomocí modifikátoru __stdcall vrací hodnoty stejným způsobem jako funkce deklarované pomocí __cdecl.

U procesorů __stdcall ARM a x64 se kompilátor přijímá a ignoruje. V architekturách ARM a x64 se podle konvence předávají argumenty v registrech, pokud je to možné, a následné argumenty se předávají v zásobníku.

U funkcí nestatické třídy platí, že je-li funkce definovaná mimo řádek, modifikátor konvence volání není nutné určit 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. Vzhledem k této definici třídy,

struct CMyClass {
   void __stdcall mymethod();
};

tohoto provozu

void CMyClass::mymethod() { return; }

je ekvivalentní tomuto

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

Příklad

V následujícím příkladu se používají výsledky ve všech WINAPI typech __stdcall funkcí, které se zpracovávají 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é

Konvence předávání a pojmenování argumentů
Klíčová slova