__thiscall

La convenzione di chiamata specifica di__thiscall Microsoft viene usata nelle funzioni membro della classe C++ nell'architettura x86. Si tratta della convenzione di chiamata predefinita usata dalle funzioni membro che non usano argomenti di variabile (vararg funzioni).

In __thiscall, il chiamato pulisce lo stack, che è impossibile per vararg le funzioni. Gli argomenti vengono inseriti nello stack da destra a sinistra. Il this puntatore viene passato tramite ECX del registro e non nello stack.

Nei computer ARM, ARM64 e x64 viene __thiscall accettato e ignorato dal compilatore. Questo perché usano una convenzione di chiamata basata su registrazione per impostazione predefinita.

Un motivo per usare __thiscall è nelle classi le cui funzioni membro usano __clrcall per impostazione predefinita. In tal caso, è possibile usare __thiscall per rendere le singole funzioni membro chiamabili dal codice nativo.

Durante la compilazione con /clr:pure, tutte le funzioni e i puntatori a funzione non sono __clrcall specificati diversamente. Le opzioni del /clr:pure compilatore e /clr:safe sono deprecate in Visual Studio 2015 e non supportate in Visual Studio 2017.

vararg le funzioni membro usano la convenzione di __cdecl chiamata. Tutti gli argomenti della funzione vengono inseriti nello stack, con il this puntatore posizionato sullo stack per ultimo.

Poiché questa convenzione di chiamata si applica solo a C++, non ha uno schema di decorazione dei nomi C.

Quando si definisce una funzione membro di classe non statica out-of-line, specificare il modificatore della convenzione di chiamata solo nella dichiarazione. Non è necessario specificarlo di nuovo nella definizione out-of-line. Il compilatore usa la convenzione di chiamata specificata durante la dichiarazione al punto di definizione.

Vedi anche

Passaggio di argomenti e convenzioni di denominazione