__stdcall

Die __stdcall Aufrufkonvention wird verwendet, um Win32-API-Funktionen aufzurufen. Der angerufene sauber den Stapel, sodass der Compiler Funktionen __cdeclmachtvararg. Für Funktionen, die diese Aufrufkonvention verwenden, ist ein Funktionsprototyp erforderlich. Der __stdcall Modifizierer ist microsoftspezifisch.

Syntax

Rückgabetyp-Funktionsname__stdcall[(Argumentliste])

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 Einem Unterstrich (_) wird der Name vorangestellt. Auf den Namen folgt das At-Zeichen (@) gefolgt von der Anzahl der Bytes (dezimal) 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 None

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

Aus Gründen der Kompatibilität mit früheren Versionen _stdcall ist ein Synonym für __stdcall die Angabe der Compileroption /Za (Sprachenerweiterungen deaktivieren).

Funktionen, die mithilfe des __stdcall Modifizierers deklariert werden, geben Werte auf die gleiche Weise zurück wie funktionen, die mit __cdecldeklariert werden.

Auf ARM- und x64-Prozessoren __stdcall wird der Compiler akzeptiert und ignoriert. Bei ARM- und x64-Architekturen werden Argumente nach Möglichkeit in Registern übergeben, und nachfolgende Argumente werden auf dem 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 werden __stdcall ergebnisse in allen WINAPI Funktionstypen als Standardaufruf behandelt:

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

Siehe auch

Argumentübergabe und Benennungskonventionen
Schlüsselwörter