__thiscall__thiscall

Específicos de MicrosoftMicrosoft Specific

El __thiscall convención de llamada se usa en funciones miembro y es el valor predeterminado que usa una convención de llamada C++ funciones miembro que no usan argumentos de variable.The __thiscall calling convention is used on member functions and is the default calling convention used by C++ member functions that do not use variable arguments. En __thiscall, el destinatario limpia la pila, que es imposible vararg funciones.Under __thiscall, the callee cleans the stack, which is impossible for vararg functions. Los argumentos se insertan en la pila de derecha a izquierda, con el esto puntero que se pasa a través del registro ECX y no en la pila, en la x86 arquitectura.Arguments are pushed on the stack from right to left, with the this pointer being passed via register ECX, and not on the stack, on the x86 architecture.

Una razón para utilizar __thiscall son las clases cuyas funciones miembro utilizan __clrcall de forma predeterminada.One reason to use __thiscall is in classes whose member functions use __clrcall by default. En ese caso, puede usar __thiscall para convertir en funciones miembro individual que se puede llamar desde código nativo.In that case, you can use __thiscall to make individual member functions callable from native code.

Cuando se compila con /CLR: pure, todas las funciones y punteros de función son __clrcall a menos que se especifique lo contrario.When compiling with /clr:pure, all functions and function pointers are __clrcall unless specified otherwise. El /CLR: pure y /CLR: safe opciones del compilador están en desuso en Visual Studio 2015 y no se admite en Visual Studio 2017.The /clr:pure and /clr:safe compiler options are deprecated in Visual Studio 2015 and unsupported in Visual Studio 2017.

En versiones anteriores a Visual Studio 2005, el __thiscall convención de llamada puede no especificarse explícitamente en un programa, porque __thiscall no era una palabra clave.In releases before Visual Studio 2005, the __thiscall calling convention could not be explicitly specified in a program, because __thiscall was not a keyword.

vararg funciones miembro utilizan el __cdecl convención de llamada.vararg member functions use the __cdecl calling convention. Todos los argumentos de función se insertan en la pila, con el esto puntero colocado en la pila por última vezAll function arguments are pushed on the stack, with the this pointer placed on the stack last

Como esta convención de llamada solo se aplica a C++, no hay ningún esquema de decoración de nombres de C.Because this calling convention applies only to C++, there is no C name decoration scheme.

En ARM y x64 máquinas, __thiscall acepta y omite el compilador.On ARM and x64 machines, __thiscall is accepted and ignored by the compiler.

En el caso de funciones de clase no estáticas, si la función se define fuera de línea, no es necesario especificar el modificador de convención de llamada en la definición fuera de línea.For non-static class functions, if the function is defined out-of-line, the calling convention modifier does not have to be specified on the out-of-line definition. Es decir, para los métodos miembro no estáticos de clase, en el momento de la definición se supone la convención de llamada especificada durante la declaración.That is, for class non-static member methods, the calling convention specified during declaration is assumed at the point of definition.

FIN de Específicos de MicrosoftEND Microsoft Specific

Vea tambiénSee also

Paso de argumentos y convenciones de nomenclaturaArgument Passing and Naming Conventions