Está #defined como __stdcall
, porque eso es lo que supone la API de Win32 sobre las funciones de devolución de llamada. Es una convención de llamadas: describe la manera en que se organiza la llamada de función en el nivel bajo, cómo están dispuestos los parámetros en la pila de la CPU y cosas por el estilo. Las suposiciones sobre el diseño esperado de la pila (es decir, la convención) deben coincidir entre la persona que llama y la persona que llama, de lo contrario podrían producirse todo tipo de consecuencias divertidas.
Históricamente, en las CPU Intel había múltiples convenciones; aún más si cuentas compiladores que no son de Microsoft. Asegurarse de que sus devoluciones de llamada sean __stdcall es una buena práctica. En algunos casos, según el compilador y la configuración, __stdcall es la convención de llamadas predeterminada (es decir, puede omitir CALLBACK de forma segura), pero no siempre.
De vuelta en Win16, CALLBACK se definió como far pascal
. Es mucho menos probable que sea el predeterminado para las funciones del usuario, especialmente en un programa C. El hecho de que las devoluciones de llamada se suponía que tenían una convención de llamadas Pascal fue un artefacto histórico.
¿qué es exactamente _stdcall? la forma en que LRESULT es el tipo de devolución, ¿qué es _stdclall? ¿Qué posición ocupa en la declinación? Y, podría decirlo un poco simple, ¿a qué responde? – Ghost
__stdcall denota una [convención de llamadas] (http://en.wikipedia.org/wiki/Calling_convention), una de muchas posibles. Una devolución de llamada es una técnica donde API llama a su función en lugar de viceversa. Para hacerlo correctamente, la API necesita conocer la convención de llamadas que sigue su función. –
¿cómo podemos cambiar la convención de llamadas? ¿Y la función winproc también sigue la convención de alguna manera (no tiene sentido, porque le estamos diciendo a Windows qué convención seguir, lo que significa que winproc está conectado a la convención)? Perdón por la variedad de preguntas, no estoy completamente satisfecho – Ghost