__stdcall
Microsoft-spezifisch
Die __stdcall Aufrufkonvention wird zum Aufrufen von Win32-API-Funktionen.Der Aufgerufene entleert den Stapel. Daher kann der Compiler vararg-Funktionen __cdecl.Funktionen, die diese Aufrufkonvention verwenden, erfordern einen Funktionsprototyp.
return-type __stdcall function-name[(argument-list)]
Hinweise
Die folgende Liste zeigt die Verwendung dieser Aufrufkonvention an.
Element |
Implementierung |
---|---|
Reihenfolge Argument-übergeben |
Von rechts nach links. |
Konvention Argument-übergeben |
Der Wert es sei denn, ein Zeiger oder ein Referenztyp übergeben wird. |
Stapel-Wartung Verantwortung |
Aufgerufene Funktion auf ihre eigenen Argumente vom Stapel. |
Namensergänzungskonvention |
Ein Unterstrich (_) wird dem Namen vorangestellt.Der Name wird vom @-Zeichen, gefolgt von der Anzahl von Byte (dezimal) in der Argumentliste.Daher wird die Funktion, die als int func( int a, double b ) deklariert ist, wird wie folgt: _func@12 |
CASE-Übersetzung Konvention |
None |
Die /Gz-Compileroption gibt __stdcall für alle Funktionen nicht explizit deklariert mit einer anderen Aufrufkonvention an.
deklarierten Funktionen mithilfe der __stdcall Rückgabewerte Modifizierer auf die gleiche Weise wie die Funktionen, die mit __cdecldeklariert wurden.
Auf Itanium-Prozessorfamilie (IPF) und x64-Prozessoren __stdcall wird vom Compiler akzeptiert und ignoriert. Parameter werden für IPF vereinbarungsgemäß in Registern übergeben.
Eine nicht statische Klassenfunktionen wenn die Funktion definierten Out-of-Line ist, muss der Aufrufkonvention modifizierer jedoch nicht in der Definition Flucht angegeben werden.Das bedeutet, dass für nicht statische Member Methoden der Klasse, wird der Aufrufkonvention, die während der Deklaration angegeben wird, zum Zeitpunkt der Definition angenommen.Wenn diese Klassendefinition
struct CMyClass {
void __stdcall mymethod();
};
this
void CMyClass::mymethod() { return; }
ist äquivalent zu diesem
void __stdcall CMyClass::mymethod() { return; }
Beispiel
Im folgenden Beispielstdcall Verwendung von Ergebnissen in allen WINAPI-Typen von Funktionen als Standardwert Aufruf 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, ...);