Chamando convenções
Ao declarar um procedimento ou função, você pode usar um dos seguintes indicadores para indicar a convenção de chamada: registro, Pascal, CDECL, StdCall e SafeCall. por exemplo,
função myfunction (x, y: real): real;
...
As convenções de chamada determinam a ordem em que os parâmetros são passados para as rotinas e também afetam o uso de registros ao excluir parâmetros da pilha, parâmetros de passagem e manuseio de erros e exceção. A convenção de chamada padrão é registro.
• As chamadas de registro e Pascal passam os parâmetros da esquerda para a direita, ou seja, os parâmetros mais à esquerda são calculados e passados o mais cedo possível, e os parâmetros mais à direita são finalmente calculados e passados;
• Além das chamadas, procedimentos e funções do CDECL, remove os parâmetros da pilha antes de retornar, enquanto o CDECL usa, quando a chamada retorna, o chamador remove os parâmetros da pilha;
• As chamadas de registro podem passar parâmetros usando até 3 registros da CPU, enquanto outras chamadas usam a pilha para passar os parâmetros;
• A chamada SafeCall implementa a exceção "firewall", que implementa a notificação de erro COM interprocessante no Windows.
A tabela a seguir resume as convenções de chamada:
-------------------------------------------------------- --------------------------------------------------
-Indicator Words ----------------------------------------------- -------------------------------------------------------- -------------------------------------------------------- -------------------------------------------------------- -------------------------------------------------------- ---? |
-Register --------------- ----------------------- ||
-Pascal ------------- --------------------------- |
-cdecl ----------------- Right-to-Left --------- CALLER ------------------ --- Não ---------------------------- |
-stdcall ---------------- certo para a esquerda ---------- rotina ------------------ --- Não ------------------------- |
-SafeCall --------------- --- Não ---------------------- |
-------------------------------------------------------- -----------------------------------------------
A chamada de registro padrão é mais eficiente porque geralmente evita a criação de um quadro de pilha (um registro deve ser usado ao acessar propriedades publicadas); STDCALL e SAFECALL são recomendados. No Windows, a API do sistema usa o StdCall e o SafeCall, enquanto outros sistemas operacionais geralmente usam o CDECL (observe que o stdcall é mais eficiente que o CDECL).
Métodos que declaram interfaces duplas devem usar o SafeCall; Para obter mais informações sobre a convenção de chamada, consulte o controle do programa.
Os indicadores próximos, distantes e exportações são usados na programação do Windows de 16 bits e não têm efeito nos programas de 32 bits e são retidos para compatibilidade com versões anteriores.