__stdcall
Específicos de Microsoft
Usa la convención de llamada de __stdcall para llamar a las funciones de la API Win32.El destinatario limpia la pila, por lo que el compilador crea las funciones __cdeclde vararg .Funciones que utiliza esta convención de llamada requiere un prototipo de función.
return-type __stdcall function-name[(argument-list)]
Comentarios
La lista siguiente se muestra la aplicación de esta convención de llamada.
Elemento |
Implementación |
---|---|
el Argumento-pasar orden |
De derecha a izquierda. |
Argumento-pasar la convención |
por valor, a menos que se pase un puntero o un tipo de referencia. |
responsabilidad de Pila-mantenimiento |
La función llamada extrae sus propios argumentos de la pila. |
convención de la Nombre-decoración |
Un subrayado (_) se precede al nombre.El nombre es seguido por el signo @ seguido del número de bytes (en formato decimal) en la lista de argumentos.Por consiguiente, la función declarada como int func( int a, double b ) se decorará como sigue: _func@12 |
convención de la Caso-traducción |
None |
La opción del compilador /Gz especifica __stdcall para todas las funciones no explícitamente declaradas con otra convención de llamada.
Funciones declaradas con los valores devueltos de modificador de __stdcall de la misma manera que las funciones declaradas con __cdecl.
En la familia de procesadores Itanium (IPF) y procesadores x64, __stdcall es aceptado y pasa por el compilador; en IPF, por convención, los parámetros se pasan en el registro.
Para las funciones de clase no estáticas, si la función está fuera-de-línea definido, el modificador de la convención de llamada no tiene que especificarse en la definición fuera-de-línea.Es decir, para los métodos no estáticos de miembro de clase, se supone que la convención de llamada especificada durante la declaración actualmente la definición.Con esta definición de clase,
struct CMyClass {
void __stdcall mymethod();
};
this
void CMyClass::mymethod() { return; }
es equivalente a esto
void __stdcall CMyClass::mymethod() { return; }
Ejemplo
En el ejemplo siguiente, el uso de los resultados destdcall en todos los tipos de función de WINAPI que son administrados como llamada estándar:
// Example of the __stdcall keyword
#define WINAPI __stdcall
// Example of the __stdcall keyword on function pointer
typedef BOOL (__stdcall *funcname_ptr)(void * arg1, const char * arg2, DWORD flags, ...);