transmettre _ en tant qu’attribut
L’attribut [ transmit _ As ] indique au compilateur d’associer l' ID de type, qui est un type présenté que les applications client et serveur manipulent, avec un type de transmission de 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 *);
Paramètres
-
type de transmission
-
Spécifie le type de données transmis entre le client et le serveur.
-
type-attribut-List
-
Spécifie un ou plusieurs attributs qui s’appliquent au type. Les attributs de type valides incluent [ handle ] , [ _ type de commutateur ] ; attribut de pointeur [ ref ] , [ unique ] ou [ ptr ] ; et la chaîne d’attributs d’utilisation [ ] 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 enum ou un identificateur de type. Une spécification de stockage facultative peut précéder le type-specifier.
-
déclarateur-liste
-
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 tableau et Sized-Pointer attributs, tableaux, tableaux et pointeurs. La liste déclarateur se compose d’un ou de 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.
-
ID de type
-
Spécifie le nom du type de données présenté aux applications clientes et serveur.
Notes
Pour utiliser l’attribut [ transmettre _ en tant que ] , l’utilisateur doit fournir des routines qui convertissent les données entre les types présentés et transmis ; ces routines doivent également libérer de la mémoire utilisée pour stocker les données converties. L’attribut [ transmit _ As ] indique aux stubs d’appeler les routines de conversion fournies par l’utilisateur.
Le type de transmission de 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 * * * _ à _ transmission* | 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 des pointeurs dans le type transmis. |
| ID de type * * * _ de l' _ émetteur* | Convertit les données du type transmis vers le type présenté. Cette routine est chargée d’allouer de la mémoire pour les données référencées par des pointeurs dans le type présenté. RPC alloue de la mémoire pour le type lui-même. |
| ID de type * * * _ Free _ inst* | Libère la mémoire allouée pour les données référencées par des pointeurs dans le type présenté. RPC libère de la mémoire pour le type lui-même. |
| type-ID * * * transmission _ gratuite _* | Libère le stockage utilisé par l’appelant pour le type transmis et pour les données référencées par des pointeurs dans le type transmis. |
Le stub client appelle l' ID de type * * _ * _ pour transmettre * pour allouer de l’espace pour le type transmis et pour convertir les données en objets de type transmission -type. Le stub serveur alloue de l’espace pour le type de données d’origine et appelle l' ID de type * * * _ à partir de _ transmission * pour convertir les données de son type transmis vers le type présenté.
Lors du retour du code de l’application, le stub serveur appelle le type-ID * * * _ Free _ inst* pour libérer le stockage de l' ID de type côté serveur. Le stub client appelle l' ID de type * * * transmission _ gratuite _* pour libérer le stockage de type transmission côté client.
Les types suivants ne peuvent pas avoir d’attribut [ transmit _ As ] :
- Handles de contexte (types avec l’attribut de type de [ _ handle de contexte ] et les types utilisés comme paramètres avec l’attribut de [ _ handle ] de contexte )
- 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
- Handle de type prédéfini _ t, void
Les types transmis doivent respecter les restrictions suivantes :
- Ils ne doivent pas être des pointeurs ou contenir des pointeurs.
- Ils ne doivent pas être des canaux ou contenir des canaux.
Exemples
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 *);