Appeler des conventions
Lorsque vous déclarez une procédure ou une fonction, vous pouvez utiliser l'un des indicateurs suivants pour indiquer la convention d'appel: enregistrement, Pascal, CDECL, STDCALL et SafeCall. Par exemple,
fonction myFunction (x, y: réel): réel;
...
Les conventions d'appel déterminent l'ordre dans lequel les paramètres sont passés aux routines, et ils affectent également l'utilisation de registres lors de la suppression des paramètres de la pile, de la transmission des paramètres et de la gestion des erreurs et des exceptions. La convention d'appel par défaut est le registre.
• Enregistrer et Pascal Calls Pass Paramètres de gauche à droite, c'est-à-dire que les paramètres les plus à gauche sont calculés et passés au plus tôt, et les paramètres les plus à droite sont finalement calculés et passés;
• En plus des appels CDECL, des procédures et des fonctions suppriment les paramètres de la pile avant de retourner, tandis que CDECL utilise, lorsque l'appel renvoie, l'appelant supprime les paramètres de la pile;
• Les appels d'enregistrement peuvent transmettre des paramètres en utilisant jusqu'à 3 registres de processeur, tandis que d'autres appels utilisent tous la pile pour transmettre des paramètres;
• L'appel SafeCall implémente l'exception "pare-feu", qui met en œuvre une notification d'erreur inter-processus sous Windows.
Le tableau suivant résume les conventions d'appel:
-------------------------------------------------- ------------------------------------------------
-Indicator Mots ----------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ---? |
-register --------------- gauche à droite --------- Routine ----------------- Oui --------------------- ||
-Pascal --------------- gauche à droite --------- Routine ----------------- Non ------------------------- |
-Cdecl ----------------- droit à gauche --------- Appelant ---------------- --- Non ---------------------------- |
-Stdcall ---------------- Right-to-Left ---------- Routine ---------------- --- Non ------------------------- |
-Safecall --------------- Droite-à gauche ---------- Routine ----------------- --- Non ---------------------- |
-------------------------------------------------- -----------------------------------------------
L'appel de registre par défaut est le plus efficace car il évite généralement la création d'une trame de pile (un registre doit être utilisé lors de l'accès aux propriétés publiées); STDCALL et SafeCall sont recommandés. Dans Windows, l'API système utilise STDCALL et SafeCall, tandis que d'autres systèmes d'exploitation utilisent généralement CDECL (notez que STDCALL est plus efficace que CDECL).
Les méthodes qui déclarent les doubles interfaces doivent utiliser SAFECALL; Pour plus d'informations sur la convention d'appel, reportez-vous au contrôle du programme.
Les indicateurs proches, loin et exportations sont utilisés dans la programmation Windows 16 bits, et ils n'ont aucun effet sur les programmes 32 bits, et ils sont conservés pour une compatibilité vers l'arrière.