Udostępnij za pośrednictwem


__thiscall

Specyficzne dla firmy Microsoft

Konwencja wywoływania __thiscall jest używana w funkcjach składowych i jest to domyślna konwencja wywołania używana przez funkcje składowe C++, które nie korzystają ze zmiennych argumentów.W __thiscall, wywoływany czyści stos, co jest niemożliwe dla funkcji vararg.Argumenty są wkładane na stos od prawej do lewej, ze wskaźnikiem this przekazywanym za pośrednictwem rejestru ECX, a nie na stosie, w architekturze x86.

Jeden powód, aby używać __thiscall to klasy, których funkcje składowe używają domyślnie __clrcall.W takim przypadku można użyć __thiscall, aby poszczególne funkcje składowe były możliwe do wywołania z kodu natywnego.

Podczas kompilowania z /clr:pure, wszystkie funkcje i wskaźniki funkcji są __clrcall chyba że określono inaczej.

W wersjach przed Visual C++ 2005 konwencja wywoływania thiscall może nie być jawnie określona w programie, ponieważ thiscall nie jest słowem kluczowym.

vararg funkcje składowe używają konwencji wywoływania __cdecl.Wszystkie argumenty funkcji są umieszczane na stosie, ze wskaźnikiem this umieszczonym jako ostatni na stosie

Ponieważ niniejsza konwencja wywoływania odnosi się tylko do języka C++, nie ma żadnego schematu dekorowania nazwy w języku C.

W przypadku komputerów ARM i x64 słowo kluczowe __thiscall jest akceptowane i ignorowane przez kompilator.

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.

Przykład

// thiscall_cc.cpp
// compile with: /c /clr:oldSyntax
struct CMyClass {
   void __thiscall mymethod();
   void __clrcall mymethod2();
};

Zobacz też

Informacje

Przekazywanie argumentów i konwencje nazewnictwa