¿Cuál es la diferencia entre la función de devolución de llamada y la función normal?
-
28-09-2019 - |
Pregunta
Ok voy a dar dos ejemplos de función se utilizan CALLBACK
y función normal.
Nota:. No he escrito estos ejemplos
Función regular
int sumExample (int a, int b)
{
return a + b;
}
int main()
{
int = sumExample(1, 3);
cout >> int;
return 0;
}
Función usando _stdcall
int __stdcall sumExample (int a, int b);
¿cuál es la diferencia?
Nota: No estoy seguro de cómo funciona convenciones de llamada, un ejemplo sería ayudar
Solución
Básicamente, una convención de llamada especifica los detalles de implementación de cómo la función se llamará. La mayoría de las bibliotecas utilizan la convención de llamada estándar C - __cdecl
. Sin embargo WinAPI espera __stdcall
. Sólo es necesario saber dos cosas acerca de convenciones de llamada: que tienen que coincidir, por ejemplo, no se puede convertir un void(*)(int, int)
, que es implícitamente una void(__cdecl *)(int, int)
, a un void(__stdcall *)(int, int)
, y que el valor predeterminado es __cdecl
. CALLBACK
es sólo un #define WinAPI para que puedan cambiar si así lo desean.
Otros consejos
No mucho, la verdad. Un "devolución de llamada" es un nombre dado a una función para pasar a otra función que va a "llamar de nuevo" cuando ... sucede algo útil. No hay razón para que no se puede utilizar también como función regular sin embargo.