Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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__stdcallFunktionsname[(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, ...);