Freigeben über


__stdcall

Die __stdcall-Aufrufkonvention wird zum Aufrufen von Win32-API-Funktionen verwendet. Der Aufgerufene löscht den Stapel. Daher kann der Compiler vararg-Funktionen als __cdecl festlegen. Für Funktionen, die diese Aufrufkonvention verwenden, ist ein Funktionsprototyp erforderlich. Der __stdcall-Modifizierer ist Microsoft-spezifisch.

Syntax

Rückgabetyp__stdcallFunktionsname[(Argumentliste)]

auto __stdcall Funktionsname[(Argumentliste)] [ ->Rückgabetyp ]

Hinweise

Die folgende Liste zeigt die Implementierung dieser Aufrufkonvention.

Element Implementierung
Reihenfolge der Argumentübergabe Von rechts nach links.
Argumentübergabekonvention Nach Wert, es sei denn, ein Zeiger oder ein Referenztyp wird übergeben.
Stapelwartungszuständigkeit Die aufgerufene Funktion nimmt die eigenen Argumente vom Stapel auf.
Namensergänzungskonvention Ein Unterstrich (_) wird dem Namen vorangestellt. Dem Namen folgt das @-Zeichen, gefolgt von der Anzahl von Bytes (als Dezimalzahl) in der Argumentliste. Daher wird die Funktion, die als int func( int a, double b ) deklariert ist, wie folgt ergänzt: _func@12
Konvention zur Umwandlung von Groß- in Kleinbuchstaben und umgekehrt Keine

Die /Gz-Compileroption gibt __stdcall für alle Funktionen an, die nicht explizit mit einer anderen Aufrufkonvention deklariert wurden.

Aus Gründen der Kompatibilität mit früheren Versionen ist _stdcall ein Synonym für __stdcall, es sei denn, die Compileroption /Za (Spracherweiterungen deaktivieren) ist angegeben.

Funktionen, die mithilfe des __stdcall-Modifizierers deklariert werden, geben Werte auf die gleiche Art und Weise zurück wie die Funktionen, die mit __cdecl deklariert werden.

Auf ARM- und x64-Prozessoren wird __stdcall vom Compiler akzeptiert und ignoriert. Auf ARM- und x64-Architekturen werden Argumente konventionsgerecht möglichst in Registern und nachfolgende Argumente im Stapel übergeben.

Wenn die Funktion bei nicht statischen Klassenfunktionen abweichend definiert ist, muss der Aufrufkonventionsmodifizierer nicht in der abweichenden Definition angegeben werden. Das bedeutet, dass für nicht statische Membermethoden der Klasse zum Zeitpunkt der Definition die während der Deklaration angegebene Aufrufkonvention angenommen wird. Bei der Klassendefinition

struct CMyClass {
   void __stdcall mymethod();
};

this

void CMyClass::mymethod() { return; }

entspricht

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

Beispiel

Im folgenden Beispiel führt die Verwendung von __stdcall in allen WINAPI-Funktionstypen dazu, dass sie als Standardaufruf behandelt werden:

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

Weitere Informationen

Argumentübergabe und Benennungskonventionen
Schlüsselwörter