transmit_as (attribut)
L’attribut [transmit_as] indique au compilateur d’associer type-id*,* qui est un type présenté que les applications clientes et serveurs manipulent, à un type xmit-type transmis.
typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list;
void __RPC_USER type-id_to_xmit (
type-id __RPC_FAR *,
xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
xmit-type __RPC_FAR *,
type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
xmit-type__RPC_FAR *);
-
xmit-type
-
Spécifie le type de données transmis entre le client et le serveur.
-
type-attribute-list
-
Spécifie un ou plusieurs attributs qui s’appliquent au type. Les attributs de type valides incluent [handle], [switch_type] ; l’attribut pointeur [ref], [unique] ou [ptr]; et les attributs d’utilisation [string] et [ignore]. Séparez plusieurs attributs par des virgules.
-
spécificateur de type
-
Spécifie un type de base, un struct, une union, un type d’énumération ou un identificateur de type. Une spécification de stockage facultative peut précéder le spécificateur de type.
-
declarator-list
-
Spécifie les déclarateurs C standard, tels que les identificateurs, les déclarateurs de pointeurs et les déclarateurs de tableau. Pour plus d’informations, consultez Tableaux et Sized-Pointer Attributs, tableaux et tableaux et pointeurs. La liste déclaratrice se compose d’un ou plusieurs déclarateurs séparés par des virgules. Le déclarateur de paramètre dans le déclarateur de fonction, tel que le nom du paramètre, est facultatif.
-
type-id
-
Spécifie le nom du type de données présenté aux applications client et serveur.
Pour utiliser l’attribut [transmit_as], l’utilisateur doit fournir des routines qui convertissent les données entre les types présenté et transmis ; ces routines doivent également libérer la mémoire utilisée pour contenir les données converties. L’attribut [transmit_as] indique aux stubs d’appeler les routines de conversion fournies par l’utilisateur.
Le type xmit-type transmis doit être résolu en un type de base MIDL, un type prédéfini ou un identificateur de type. Pour plus d’informations, consultez Types de base MIDL.
L’utilisateur doit fournir les routines suivantes.
Nom de la routine | Description |
---|---|
type-id**_to_xmit** | Convertit les données du type présenté en type transmis. Cette routine alloue de la mémoire pour le type transmis et pour toutes les données référencées par les pointeurs dans le type transmis. |
type-id**_from_xmit** | Convertit les données du type transmis en type présenté. Cette routine est responsable de l’allocation de la mémoire pour les données référencées par les pointeurs dans le type présenté. RPC alloue de la mémoire pour le type lui-même. |
type-id**_free_inst** | Libère la mémoire allouée pour les données référencées par les pointeurs dans le type présenté. RPC libère de la mémoire pour le type lui-même. |
type-id**_free_xmit** | Libère le stockage utilisé par l’appelant pour le type transmis et pour les données référencées par les pointeurs dans le type transmis. |
Le stub client appelle type-id**_to_xmit** pour allouer de l’espace pour le type transmis et traduire les données en objets de type xmit-type. Le stub du serveur alloue de l’espace pour le type de données d’origine et appelle type-id**_from_xmit** pour traduire les données de son type transmis en type présenté.
Au retour du code d’application, le stub du serveur appelle type-id**_free_inst** pour libérer le stockage pour type-id côté serveur. Le stub client appelle type-id**_free_xmit** pour libérer le stockage de type xmit côté client.
Les types suivants ne peuvent pas avoir d’attribut [transmit_as] :
- Handles de contexte (types avec l’attribut de type [context_handle] et types qui sont utilisés comme paramètres avec l’attribut [context_handle] )
- Types qui sont des canaux ou dérivés de canaux
- Types de données utilisés comme type de base d’une définition de canal
- Paramètres qui sont des pointeurs ou qui sont résolus en pointeurs
- Paramètres qui sont des tableaux conformes, variables ou ouverts
- Structures qui contiennent des tableaux conformes
- Type prédéfini handle_t, void
Les types transmis doivent être conformes aux restrictions suivantes :
- Ils ne doivent pas être des pointeurs ni contenir de pointeurs.
- Il ne doit pas s’agir de tuyaux ni contenir de tuyaux.
typedef struct _TREE_NODE_TYPE
{
unsigned short data;
struct _TREE_NODE_TYPE * left;
struct _TREE_NODE_TYPE * right;
} TREE_NODE_TYPE;
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE;
void __RPC_USER TREE_TYPE_to_xmit(
TREE_TYPE __RPC_FAR * ,
TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *);
void __RPC_USER TREE_TYPE_from_xmit (
TREE_XMIT_TYPE __RPC_FAR *,
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_inst(
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_xmit(
TREE_XMIT_TYPE __RPC_FAR *);