attribut de rappel
L’attribut [rappel] déclare une fonction de rappel statique qui existe côté client de l’application distribuée. Les fonctions de rappel permettent au serveur d’exécuter du code sur le client.
[callback [ , function-attr-list] ] type-specifier [ptr-declarator] function-name(
[ [attribute-list] ] type-specifier [declarator]
, ...);
-
function-attr-list
-
Spécifie zéro ou plusieurs attributs qui s’appliquent à la fonction. Les attributs de fonction valides sont [local]; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [string], [ignore]et [context_handle]. Séparez plusieurs attributs par des virgules.
-
spécificateur de type
-
Spécifie un identificateur de type base_type, struct, union, type d’énumération ou type. Une spécification de stockage facultative peut précéder le spécificateur de type.
-
ptr-declarator
-
Spécifie zéro ou plusieurs déclarateurs de pointeur. Un déclarateur de pointeur est identique au déclarateur de pointeur utilisé dans C ; il est construit à partir de l’indicateur *, des modificateurs tels que la distance et du qualificateur const.
-
nom de la fonction
-
Spécifie le nom de la procédure distante.
-
attribute-list
-
Spécifie un ou plusieurs attributs directionnels, des attributs de champ, des attributs d’utilisation et des attributs de pointeur appropriés pour le type de paramètre spécifié. Séparez plusieurs attributs par des virgules.
-
declarator
-
Spécifie un déclarateur C standard, tel que des identificateurs, des déclarateurs de pointeurs et des déclarateurs de tableau. Pour plus d’informations, consultez Tableaux et Sized-Pointer Attributs, tableaux et tableaux et pointeurs. L’identificateur de nom de paramètre est facultatif.
La fonction [rappel] est utile lorsque le serveur doit obtenir des informations auprès du client. Si les applications serveur étaient prises en charge sur Windows 3. x, le serveur peut effectuer un appel à une procédure distante sur Windows 3. x serveur pour obtenir les informations nécessaires. La fonction de rappel accomplit le même objectif et permet au serveur d’interroger le client pour obtenir des informations dans le contexte de l’appel d’origine.
Les rappels sont des cas spéciaux d’appels distants qui s’exécutent dans le cadre d’un thread unique. Un rappel est émis dans le contexte d’un appel distant. Toute procédure distante définie dans le cadre de la même interface que la fonction de rappel statique peut appeler la fonction de rappel.
Il est important de noter que l’utilisation de [rappel] n’est pas recommandée dans la programmation multi-thread. En tant que fonction de programmation à thread unique, elle n’est pas équipée pour prendre en charge les exigences de sécurité d’un environnement multithread.
La fonction RpcCancelThread ne peut pas être utilisée pour annuler un appel susceptible de distribuer un rappel statique. Si un appel de procédure distante particulière n’aboutit jamais à un rappel, il peut être annulé. Dans le cas contraire, un appel ne peut être annulé que s’il peut être garanti qu’un rappel n’a pas été émis.
Seules les séquences de protocole local et orientées connexion prennent en charge l’attribut de rappel. La taille des données [out] pour les rappels sur la séquence de protocole local est limitée à 150 octets. Si une interface RPC utilise une séquence de protocole (datagramme) sans connexion, les appels aux procédures avec l’attribut de rappel échouent.
Les handles ne peuvent pas être utilisés comme paramètres dans les fonctions de rappel. Étant donné que les rappels s’exécutent toujours dans le contexte d’un appel, le handle de liaison utilisé par le client pour effectuer l’appel au serveur est également utilisé comme handle de liaison entre le serveur et le client.
Les rappels peuvent imbriquer à n’importe quelle profondeur.
[callback] HRESULT DisplayString([in, string] char * p1);