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]
        , ...);

Paramètres

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.

Notes

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.

Exemples

[callback] HRESULT DisplayString([in, string] char * p1);

Voir aussi

Tableaux

MIDL Base Types

const

context_handle

Enum

Fichier de définition d’interface (IDL)

Ignorer

Local

/Osf

Ref

Ptr

String

Struct

Union

Unique

RpcCancelThread