__stdcall
Die __stdcall
Aufrufkonvention wird verwendet, um Win32-API-Funktionen aufzurufen. Der angerufene sauber den Stapel, sodass der Compiler Funktionen __cdecl
machtvararg
. 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 __cdecl
deklariert 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für