__fastcall
Programu Microsoft
__Fastcall konwencji wywoływania Określa, że argumenty funkcji są przekazywane w rejestrach, gdy jest to możliwe.Na poniższej liście przedstawiono wdrażania niniejszej konwencji wywoływania.
Element |
Wdrożenie |
---|---|
Kolejność przekazywania argumentu |
Dwa pierwsze DWORD lub mniejszych argumenty są przekazywane w ECX i EDX rejestrów; inne argumenty są przekazywane po prawej do lewej. |
Odpowiedzialność za utrzymanie stosu |
Wywoływana funkcja POP argumenty ze stosu. |
Przekręcenie nazwy Konwencji |
Znak (@) jest prefiksem nazwy; znak następuje liczba bajtów (w zapisie dziesiętnym) w parametrze lista jest umieszczona po nazwach. |
Tłumaczenie przypadku Konwencji |
Nie sprawy tłumaczenie wykonywane. |
[!UWAGA]
Kompilator w przyszłych wersjach mogą używać różnych rejestrów do przechowywania parametrów.
Za pomocą się przełączników /Gr opcji kompilatora powoduje, że każdej funkcji w module skompilować jako fastcall, chyba że funkcja jest zadeklarowana z atrybutem powodujące konflikt lub nazwę funkcji, jest main.
Na komputerach z rodziny procesor Itanium (IPF) i AMD64 __fastcall jest akceptowane i ignorowane przez kompilator; w układzie 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 __fastcall mymethod();
};
to
void CMyClass::mymethod() { return; }
jest to równoważne
void __fastcall CMyClass::mymethod() { return; }
Przykład
W poniższym przykładzie funkcja o nazwie DeleteAggrWrapper jest przekazywana argumentów w rejestrach:
// Example of the __fastcall keyword
#define FASTCALL __fastcall
void FASTCALL DeleteAggrWrapper(void* pWrapper);
// Example of the __ fastcall keyword on function pointer
typedef BOOL (__fastcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);