__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();
};