SAFECALL |
Appel sécuritaire |
Delphi/Kylix/Lazarus |
Syntaxe
Function identf(param):typef; SafeCall;corps de la fonction;
|
Procedure identproc(param); SafeCall;corps de la procédure;
|
Paramètres
Nom |
Description |
identf |
Ce paramètre permet d'indiquer l'identificateur de la fonction. |
identproc |
Ce paramètre permet d'indiquer l'identificateur de nom de la procédure. |
param |
Ce paramètre permet d'indiquer les paramètres de la fonction. |
typef |
Ce paramètre permet d'indiquer le type de données de la fonction. |
Description
Ce mot réservé permet d'indiquer qu'il faut utiliser la convention d'appel sécuritaire pour les appels de fonction ou de procédure.
Remarques
- La directive safecall indique au compilateur d'utiliser la convention d'appel sécurisé pour la fonction ou la procédure.
- Comme stdcall, l'appelant pousse les paramètres sur la pile, en commençant par le paramètre le plus à droite. Avant le retour du
sous-programme, il fait apparaître les paramètres de la pile.
- Si la routine est une fonction, Delphi passe un paramètre supplémentaire pour entreposer sa valeur de retour. Les fonctions et procédures sont converties
en interne en fonctions renvoyant une valeur HResult.
- Si le sous-programme est une méthode, Self et le paramètre de résultat de la fonction masquée sont les derniers, ils sont donc poussés
en premier sur la pile.
- Le compilateur encapsule automatiquement le corps du sous-programme dans un gestionnaire d'exceptions, donc Delphi intercepte toutes les exceptions et la méthode
safecall ne lève jamais d'exception visible par l'appelant. Si le sous-programme retourne normalement, Delphi entrepose zéro dans la valeur de retour
HResult masquée. Si la routine safecall est une méthode déclenchant une exception, Delphi appelle la méthode SafeCallException de l'objet
pour cartographier l'exception à une valeur HResult. Si la routine safecall est une fonction ou une procédure simple, le Delphi cartographie chaque
exception à E_Unexpected.
- Le compilateur génère l'appel de sous-programme à l'aide de la convention d'appel stdcall et vérifie également le HResult renvoyé
par la fonction. Si l'état indique une erreur, Delphi appelle la procédure entreposée dans SafeCallErrorProc.
Dernière mise à jour : Mercredi, le 18 avril 2019