__thiscall

La convención de llamada específica de Microsoft__thiscall se usa en funciones miembro de clase de C++ en la arquitectura x86. Es la convención de llamada predeterminada que emplean las funciones miembro que no usan argumentos de variable (funciones vararg).

En __thiscall, el destinatario limpia la pila, lo que es imposible para las funciones vararg. Los parámetros se insertan en la pila de derecha a izquierda. El puntero this se pasa a través del registro ECX y no en la pila.

En equipos ARM, ARM64 y x64, el compilador acepta y omite a __thiscall. Esto se debe a que usan una convención de llamada basada en registros predeterminados.

Un motivo para usar __thiscall son las clases cuyas funciones miembro usan __clrcall de forma predeterminada. En ese caso, puede usar __thiscall para crear funciones miembro individuales que se puedan llamar desde código nativo.

Al compilar con /clr:pure, todas las funciones y los punteros a función son __clrcall a menos que se especifique lo contrario. Las opciones del compilador /clr:pure y /clr:safe han quedado en desuso en Visual Studio 2015 y no se admiten en Visual Studio 2017.

Las funciones miembro vararg usan la convención de llamada __cdecl. Todos los argumentos de función se insertan en la pila, colocándose el puntero this en el último lugar de la pila.

Como esta convención de llamada solo se aplica a C++, no tiene ningún esquema de decoración de nombres de C.

Al definir una función miembro de clase no estática fuera de línea, especifique el modificador de convención de llamada solo en la declaración. No es necesario volver a especificarlo en la definición fuera de línea. El compilador usa la convención de llamada especificada durante la declaración en el punto de definición.

Consulte también

Convenciones de nomenclatura y paso de argumentos