Sdílet prostřednictvím


__thiscall

Specifické pro Microsoft

Konvence volání __thiscall se používá na členské funkce a je výchozí konvencí volání členských funkcí jazyka C++, které nepoužívají proměnné argumenty.Při volání __thiscall volaný vyčistí zásobník, což je nemožné pro funkci vararg.Argumenty jsou přesunuty na zásobník zprava doleva, s ukazatelem this předaným prostřednictvím registru ECX, a ne pomocí zásobníku, na architektuře x86.

Jeden z důvodů pro použití volání __thiscall je v třídách, jejichž členské funkce ve výchozím stavu používají __clrcall.V takovém případě je možné použít __thiscall, což učiní jednotlivé členské funkce volatelné z nativního kódu.

Při kompilaci s /clr: pure jsou všechny funkce a ukazatele na funkce __clrcall, pokud není uvedeno jinak.

Ve verzích před Visual C++ 2005 nelze konvenci volání thiscall v programu explicitně určit, protože thiscall nebylo klíčové slovo.

Členské funkce vararg používají konvenci volání __cdecl.Všechny argumenty funkce jsou přesunuty na zásobník, s ukazatelem this umístěným na zásobník naposledy.

Vzhledem k tomu, že se tato konvence volání vztahuje pouze na jazyk C++, neexistuje žádné schéma dekorace jména pro jazyk C.

Na počítačích ARM a x64 je __thiscall kompilátorem přijat a ignorován.

U funkcí nestatické třídy je-li funkce definovaná mimo řádek, volající konvenční modifikátor nemusí být stanoven na definici mimo řádek.To znamená, že pro členské nestatické metody třídy se konvence volání zadaná během deklarace přejme během definice.

Příklad

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

Viz také

Referenční dokumentace

Konvence předávání a pojmenování argumentů