Convenciones de llamadas
Al declarar un procedimiento o función, puede usar uno de los siguientes indicadores para indicar la convención de llamadas: Registrar, Pascal, CDECL, STDCall y SafeCall. Por ejemplo,
función myfunction (x, y: real): real;
...
Las convenciones de llamadas determinan el orden en que se pasan los parámetros a las rutinas, y también afectan el uso de registros al eliminar los parámetros de la pila, los parámetros de paso y el manejo de errores y excepciones. La convención de llamadas predeterminada está registrada.
• Registrarse y las llamadas de Pascal pasan los parámetros de izquierda a derecha, es decir, los parámetros más a la izquierda se calculan y pasan lo antes posible, y los parámetros más a la derecha finalmente se calculan y pasan;
• Además de las llamadas, procedimientos y funciones de CDECL, elimine los parámetros de la pila antes de devolver, mientras que CDECL usa, cuando la llamada regresa, la persona que llama elimina los parámetros de la pila;
• Las llamadas de registro pueden pasar parámetros utilizando hasta 3 registros de CPU, mientras que otras llamadas usan la pila para pasar los parámetros;
• La llamada SafeCall implementa la excepción "Firewall", que implementa la notificación de error de COM entre procesos en Windows.
La siguiente tabla resume las convenciones de llamadas:
-------------------------------------------------- ------------------------------------------------
-Disdicador Palabras ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---? |
-Register --------------- Izquierda --------- Rutina ----------------- SÍ --------------------- ||
-Pascal --------------- Izquierda --------- Rutina ----------------- No ------------------------- |
-cdecl ----------------- Derecha a izquierda --------- Callador -------------------- --- No ---------------------------- |
-StdCall ---------------- Dirección a izquierda ---------- Rutina -------------------- --- No ------------------------- |
-Safecall --------------- Derecho a izquierda ---------- Rutina ----------------- --- No ---------------------- |
-------------------------------------------------- -----------------------------------------------
La llamada de registro predeterminada es más eficiente porque generalmente evita crear un marco de pila (se debe usar un registro al acceder a las propiedades publicadas); Se recomiendan stdcall y safecall. En Windows, la API del sistema usa STDCall y SafeCall, mientras que otros sistemas operativos generalmente usan CDECL (tenga en cuenta que STDCall es más eficiente que CDECL).
Los métodos que declaran interfaces duales deben usar Safecall; Para obtener más información sobre la convención de llamadas, consulte el control del programa.
Los indicadores cercanos, lejanos y de exportación se utilizan en la programación de Windows de 16 bits, y no tienen ningún efecto en los programas de 32 bits, y se conservan para la compatibilidad hacia atrás.