Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Konwencja __stdcall
wywoływania służy do wywoływania funkcji interfejsu API Win32. Obiekt wywoływany czyści stos, więc kompilator tworzy vararg
funkcje __cdecl
. Funkcje korzystające z tej konwencji wywoływania wymagają prototypu funkcji. Modyfikator __stdcall
jest specyficzny dla firmy Microsoft.
Składnia
return-type
__stdcall
function-name[(
argument-list)
]
auto
__stdcall
nazwa-funkcji[(
lista-argumentów)
] [->
zwracany typ ]
Uwagi
Na poniższej liście przedstawiono implementację niniejszej konwencji wywoływania.
Element | Implementacja |
---|---|
Kolejność przekazywania argumentów | Od prawej do lewej. |
Konwencja przekazywania argumentów | Według wartości, chyba że zostanie przekazany wskaźnik lub typ odwołania. |
Odpowiedzialność za utrzymanie stosu | Wywołana funkcja wyskakuje własne argumenty ze stosu. |
Konwencja dekorowania nazw | Podkreślenie (_ ) jest poprzedzone nazwą. Po nazwie następuje znak at (@ ), po którym następuje liczba bajtów (w przecinku) na liście argumentów. W związku z tym funkcja zadeklarowana jako int func( int a, double b ) jest ozdobiona w następujący sposób: _func@12 |
Konwencja translacji wielkości liter | Brak |
/ Gz opcji kompilatora określa __stdcall
dla wszystkich funkcji, które nie zostały jawnie zadeklarowane z inną konwencją wywoływania.
Aby uzyskać zgodność z poprzednimi wersjami, jest synonimem, _stdcall
__stdcall
chyba że określono opcję /Za
kompilatora (Wyłącz rozszerzenia języka).
Funkcje zadeklarowane przy użyciu __stdcall
modyfikatora zwracają wartości tak samo jak funkcje zadeklarowane przy użyciu metody __cdecl
.
W procesorach __stdcall
ARM i x64 są akceptowane i ignorowane przez kompilator; w architekturach ARM i x64 zgodnie z konwencją argumenty są przekazywane w rejestrach, gdy to możliwe, a kolejne argumenty są przekazywane na stos.
W przypadku funkcji niestatycznych klas, jeśli funkcja jest zdefiniowana poza wierszem, modyfikator konwencji wywoływania nie musi być określony w definicji poza wierszem. Oznacza to, że dla metod niestatycznej składowej klasy przyjmowana jest konwencja wywoływania określona podczas deklaracji w punkcie definicji. Biorąc pod uwagę tę definicję klasy,
struct CMyClass {
void __stdcall mymethod();
};
this
void CMyClass::mymethod() { return; }
jest odpowiednikiem tego
void __stdcall CMyClass::mymethod() { return; }
Przykład
W poniższym przykładzie użycie __stdcall
wyników we wszystkich WINAPI
typach funkcji obsługiwanych jako wywołanie standardowe:
// 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, ...);
Zobacz też
Przekazywanie argumentów i konwencje nazewnictwa
Słowa kluczowe