__stdcall
Programu Microsoft
__stdcall Konwencji wywoływania jest wykorzystywana do wywołania funkcji Win32 API.Wywoływany czyści stosu, co sprawia, że kompilator vararg funkcje __cdecl.Funkcje korzystające z niniejszej konwencji wywoływania wymagają prototyp funkcji.
return-type __stdcall function-name[(argument-list)]
Uwagi
Na poniższej liście przedstawiono wdrażania niniejszej konwencji wywoływania.
Element |
Wdrożenie |
---|---|
Kolejność przekazywania argumentu |
Od prawej do lewej. |
Przekazywanie argumentów Konwencji |
Według wartości chyba że jest przekazywana typu wskaźnik lub odniesienia. |
Odpowiedzialność za utrzymanie stosu |
O nazwie funkcji POP własnej argumenty ze stosu. |
Przekręcenie nazwy Konwencji |
Podkreślenie (_) jest prefiks do nazwy.Nazwa następuje znak (@), następuje 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 następująca:_func@12 |
Tłumaczenie przypadku Konwencji |
Brak |
/Gz Określa opcję kompilatora __stdcall dla wszystkich funkcji, które nie są jawnie zadeklarowane z inną konwencję wywołania.
Funkcje zadeklarowane za pomocą __stdcall modyfikator zwracanej wartości w taki sam sposób jak zadeklarowane za pomocą funkcji __cdecl.
W systemach z rodziny procesor Itanium (IPF) i procesorów x 64 __stdcall jest akceptowane i ignorowane przez kompilator; na IPF przez Konwencję, parametry są przekazywane w rejestrze.
Funkcje klasy-statycznej Jeśli funkcja jest zdefiniowane poza wiersza, modyfikator konwencji wywoływania nie muszą zostać określone w definicji wiersza.Oznacza to, że dla metod niestatycznego członka klasy, konwencja wywołania określonej podczas deklaracji zakłada się w punkcie uderzenia definicji.Biorąc pod uwagę niniejszej definicji klasy
struct CMyClass {
void __stdcall mymethod();
};
to
void CMyClass::mymethod() { return; }
jest to równoważne
void __stdcall CMyClass::mymethod() { return; }
Przykład
W poniższym przykładzie wykorzystania __stdcall wyników we wszystkich WINAPI typy funkcji, 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, ...);