Partager via


Microsoft RPC Binding-Handle Extensions

Les extensions Microsoft au langage IDL prennent en charge plusieurs paramètres de handle qui apparaissent dans des positions autres que le premier paramètre le plus à gauche. Les étapes suivantes décrivent la séquence que le compilateur MIDL passe pour résoudre le paramètre de handle de liaison en mode de compatibilité DCE (/osf) et en mode par défaut (étendu par Microsoft).

Mode de compatibilité DCE

  • Handle de liaison qui apparaît en première position.
  • Leftmost [in, context_handle] parameter.
  • Handle de liaison implicite spécifié par [implicit_handle] ou [auto_handle].
  • Si aucun ACF n’est présent, utilisez par défaut [auto_handle].

Mode par défaut

  • Handle de liaison explicite le plus à gauche.
  • Handle de liaison implicite spécifié par [implicit_handle] ou [auto_handle].
  • Si aucun ACF n’est présent, utilisez par défaut [auto_handle].

Les compilateurs IDL DCE recherchent un handle de liaison explicite comme premier paramètre. Lorsque le premier paramètre n’est pas un handle de liaison et qu’un ou plusieurs handles de contexte sont spécifiés, le handle de contexte le plus à gauche est utilisé comme handle de liaison. Lorsque le premier paramètre n’est pas un handle et qu’il n’existe aucun handle de contexte, la procédure utilise une liaison implicite à l’aide de l’attribut ACF [implicit_handle] ou [auto_handle].

Les extensions Microsoft à l’IDL permettent au handle de liaison d’être dans une position autre que le premier paramètre. Le paramètre [le plus à gauche dans] paramètre de handle explicite( qu’il s’agisse d’un handle primitif, défini par programmeur ou de contexte) est le handle de liaison. En l’absence de paramètres de handle, la procédure utilise une liaison implicite à l’aide de l’attribut ACF [implicit_handle] ou [auto_handle].

Les règles suivantes s’appliquent au mode de compatibilité DCE (/osf) et au mode par défaut :

  • La liaison de handle automatique est utilisée lorsqu’aucun ACF n’est présent.
  • Explicite [dans] ou [dans, out] handles pour une fonction individuelle préempt toute liaison implicite spécifiée pour l’interface.
  • Les handles primitifs multiples [dans] ou [dans, out] ne sont pas pris en charge.
  • Plusieurs [dans] ou [dans, out] les handles de contexte explicites sont autorisés.
  • Tous les paramètres de handle définis par le programmeur, à l’exception du paramètre binding-handle, sont traités comme des données transmissibles.

Le tableau suivant contient des exemples et décrit comment les handles de liaison sont affectés en mode compilateur.

Exemple Description
void proc1( void );
Aucun handle explicite n’est spécifié. Le handle de liaison implicite, spécifié par [ implicit_handle] ou [ auto_handle], est utilisé. Lorsqu’aucun ACF n’est présent, un handle automatique est utilisé.
void proc2([in] handle_t H,           [in] short s );
Un handle explicite de type handle_t est spécifié. Le paramètre H est le handle de liaison de la procédure.
void proc3([in] short s,           [in] handle_t H );
Le premier paramètre n’est pas un handle. En mode par défaut, le paramètre de handle le plus à gauche, H, est le handle de liaison. En mode /osf, la liaison implicite est utilisée. Une erreur est signalée, car le deuxième paramètre est censé être transmissible et handle_t ne peut pas être transmis.
typedef [handle] short * MY_HDL;void proc1([in] short s,           [in] MY_HDL H );
Le premier paramètre n’est pas un handle. En mode par défaut, le paramètre de handle le plus à gauche, H, est le handle de liaison. Les stubs appellent les routines fournies par l’utilisateur MY_HDL_bind et MY_HDL_unbind. En mode osf, la liaison implicite est utilisée. Le paramètre de handle défini par le programmeur H est traité comme des données transmissibles.
Typedef [handle] short * MY_HDL;void proc1([in] MY_HDL H,            [in] MY_HDL p );
Le premier paramètre est un handle de liaison. Le paramètre H est le paramètre de handle de liaison. Le deuxième paramètre de handle défini par le programmeur est traité comme des données transmissibles.
Typedef [context_handle] void * CTXT_HDL;void proc1([in] short s,           [in] long l,           [in] CTXT_HDL H ,           [in] char c);
Le handle de liaison est un handle de contexte. Le paramètre H est le handle de liaison.