attribut pipe

Le constructeur de type de canal permet de transmettre un flux ouvert de données typées via un appel de procédure distante.

typedef pipe element-type pipe-declarator;

Paramètres

element-type

Définit la taille d’un élément unique dans la mémoire tampon de transfert. Le type d’élément peut être un type de base, un predefined_type, un struct, une énumération 32b ou un identificateur de type. Plusieurs restrictions s’appliquent aux element_types, comme décrit dans remarques ci-dessous.

déclarateur de canal

Spécifie un ou plusieurs identificateurs ou pointeurs vers des identificateurs. Séparez plusieurs déclarateurs par des virgules.

Notes

Vous pouvez utiliser le constructeur de type de canal pour transmettre des données dans les deux directions. Un paramètre de canal [in] permet au serveur d’extraire le flux de données du client lors d’un appel de procédure distante. Un paramètre de canal [out] permet au serveur de renvoyer le flux de données au client. Vous fournissez les routines côté client pour envoyer (push) et extraire (pull) le flux de données et pour allouer une mémoire tampon globale pour les données. Les routines stub du client et du serveur marshalent et démarshalent les données et transmettent une référence à la mémoire tampon à l’application.

Les restrictions suivantes s’appliquent aux canaux :

  • Un élément de canal ne peut pas être ou contenir un pointeur, un tableau conforme ou variable, un handle ou un handle de contexte. En outre, dans l’implémentation Microsoft de canaux, un élément de canal ne peut pas être ou contenir une union, une énumération 16b ou une __int3264.
  • Vous ne pouvez pas appliquer les attributs [transmit_as],[represent_as],[wire_marshal] ou [user_marshal] à un type de canal ou au type d’élément.
  • Un type de canal ne peut pas être membre d’une structure ou d’une union, de la cible d’un pointeur ou du type de base d’un tableau.
  • Un type de données déclaré comme un type de canal ne peut être utilisé que comme paramètre d’un appel distant.
  • Vous pouvez passer un paramètre de canal dans l’une ou l’autre direction par valeur ou par référence ([ref] pointeur). Toutefois, vous ne pouvez pas appliquer l’attribut [ptr] à un canal transmis par référence. Vous ne pouvez pas spécifier un paramètre de canal avec un pointeur [unique] ou complet, quelle que soit la direction.
  • Vous ne pouvez pas utiliser de canaux dans les interfaces [objet].
  • Vous ne pouvez pas appliquer l’attribut [idempotent] à une routine qui a un paramètre de canal.
  • Vous ne pouvez pas utiliser les attributs de sérialisation, [encode] et [decode] avec des canaux.
  • Vous ne pouvez pas utiliser de handles automatiques, soit par défaut, soit avec l’attribut [auto_handle], avec des canaux.

Notes

Le compilateur MIDL prend en charge les canaux en mode /Oif uniquement.

 

Pour plus d’informations sur l’implémentation de routines avec des paramètres de canal, consultez Pipes in the RPC Programmer’s Guide and Reference.

Exemples

typedef pipe unsigned char UCHAR_PIPE1, UCHAR_PIPE2;
 
//SIMPLE_STRUCT defined elsewhere
typedef pipe SIMPLE_STRUCT SIMPLE_STRUCT_PIPE;

Voir aussi

auto_handle

MIDL Base Types

Décoder

Encoder

Enum

idempotent

Dans

object

out

Ptr

Ref

represent_as

Struct

transmit_as

Unique

user_marshal

wire_marshal