__thiscall

Konwencja wywoływania specyficzna dla__thiscall firmy Microsoft jest używana w funkcjach składowych klas języka C++ w architekturze x86. Jest to domyślna konwencja wywoływania używana przez funkcje członkowskie, które nie używają argumentów zmiennych (vararg funkcji).

W obszarze __thiscallobiekt wywoływany czyści stos, który jest niemożliwy dla vararg funkcji. Argumenty są wypychane na stos od prawej do lewej. Wskaźnik this jest przekazywany za pośrednictwem rejestru ECX, a nie na stosie.

Na maszynach __thiscall ARM, ARM64 i x64 są akceptowane i ignorowane przez kompilator. Dzieje się tak, ponieważ domyślnie używają konwencji wywoływania opartej na rejestrze.

Jedną z przyczyn użycia __thiscall są klasy, których funkcje składowe używają __clrcall domyślnie. W takim przypadku można użyć __thiscall polecenia , aby poszczególne funkcje członkowskie mogły być wywoływane z kodu natywnego.

Podczas kompilowania za pomocą /clr:purepolecenia wszystkie funkcje i wskaźniki funkcji są __clrcall określone w inny sposób, chyba że określono inaczej. Opcje kompilatora /clr:pure i /clr:safe są przestarzałe w programie Visual Studio 2015 i nieobsługiwane w programie Visual Studio 2017.

vararg funkcje członkowskie używają __cdecl konwencji wywoływania. Wszystkie argumenty funkcji są wypychane na stos, a this wskaźnik umieszczony na stosie jest ostatni.

Ponieważ ta konwencja wywoływania ma zastosowanie tylko do języka C++, nie ma schematu dekoracji nazw języka C.

Podczas definiowania funkcji składowej klasy niestacjonanej poza wierszem określ modyfikator konwencji wywołującej tylko w deklaracji. Nie musisz ponownie określać go w definicji poza wierszem. Kompilator używa konwencji wywoływania określonej podczas deklaracji w punkcie definicji.

Zobacz też

Konwencje przekazywania argumentów i nazewnictwa