Compartir a través de


__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, ...);

Vea también

Referencia

El paso y convenciones de nomenclatura de argumento

Palabras clave de C++