Udostępnij za pośrednictwem


__stdcall

Specyficzne dla firmy Microsoft

Konwencja wywoływania __stdcall służy do wywoływania funkcji Win32 API.Wywoływany obiekt czyści stos, co sprawia, że kompilator tworzy funkcje vararg__cdecl.Funkcje korzystające z tej konwencja wywoływania wymagają prototypu funkcji.

return-type __stdcall function-name[(argument-list)]

Uwagi

Na poniższej liście przedstawiono implementację niniejszej konwencji wywoływania.

Element

Implementacja

Kolejność przekazywania argumentów

Od prawej do lewej.

Konwencji przekazywania argumentów

Według wartości, chyba że przekazany jest typ wskaźnika lub odwołania.

Odpowiedzialność za utrzymanie stosu

Wywołana funkcja wyciąga argumenty ze stosu.

Konwencja dekorowania nazw

Podkreślenie (_) poprzedza nazwę.Za nazwą następuje znak (@) a za nim liczba bajtów (w zapisie dziesiętnym) na liście argumentów.W związku z tym, funkcja zadeklarowana jako int func( int a, double b ) jest oznaczona: _func@12

Tłumaczenie przypadku konwencji

Brak

Opcja kompilatora /Gz określa __stdcall dla wszystkich funkcji, które nie zostały jawnie zadeklarowane z inną konwencją wywoływania.

Funkcje zadeklarowane za pomocą modyfikatora __stdcall zwracają wartości w taki sam sposób jak funkcje zadeklarowane za pomocą specyfikatora __cdecl.

W procesorach ARM i x64 __stdcall jest akceptowane i ignorowane przez kompilator; w przypadku architektur ARM i x64 według konwencji argumenty są przekazywane do rejestrów, gdy jest to możliwe, a następne argumenty są przekazywane na stosie.

W przypadku funkcji niestatycznych klas, jeśli funkcja jest zdefiniowana poza wierszem, modyfikator konwencji wywołania nie musi być określony w definicji poza wierszem.Oznacza to, że dla metod niestatycznego członka klasy przyjmowana jest konwencja wywołania określona podczas zgłoszenia w punkcie definicji.Biorąc pod uwagę tę definicję klasy,

struct CMyClass {
   void __stdcall mymethod();
};

to

void CMyClass::mymethod() { return; }

jest równoważne do

void __stdcall CMyClass::mymethod() { return; }

Przykład

W poniższym przykładzie użycie konwencji __stdcall spowoduje, że wszystkie typy funkcji WINAPI są traktowane jako standardowe wywołanie:

// 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ż

Informacje

Przekazywanie argumentów i konwencje nazewnictwa

Słowa kluczowe języka C++