transmit_as (atributo)
El atributo [transmit_as] indica al compilador que asocie type-id*,* que es un tipo presentado que manipulan las aplicaciones cliente y servidor, con un tipo transmitido xmit-type.
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 *);
Parámetros
-
xmit-type
-
Especifica el tipo de datos que se transmite entre el cliente y el servidor.
-
type-attribute-list
-
Especifica uno o varios atributos que se aplican al tipo. Los atributos de tipo válidos incluyen [handle], [switch_type]; el atributo de puntero [ref], [unique]o [ptr]; y los atributos de uso [string] y [ignore]. Separe varios atributos con comas.
-
type-specifier
-
Especifica un tipo base, estructura, unión, tipo de enumeración o identificador de tipo. Una especificación de almacenamiento opcional puede preceder al especificador de tipos.
-
declarator-list
-
Especifica declaradores de C estándar, como identificadores, declaradores de puntero y declaradores de matriz. Para obtener más información, vea Array and Sized-Pointer Attributes, arrays, and Arrays and Pointers. La lista de declaradores consta de uno o varios declaradores separados por comas. El declarador de parámetros en el declarador de función, como el nombre del parámetro, es opcional.
-
type-id
-
Especifica el nombre del tipo de datos que se presenta a las aplicaciones cliente y servidor.
Comentarios
Para usar el atributo [transmit_as], el usuario debe proporcionar rutinas que conviertan datos entre los tipos presentados y transmitidos; estas rutinas también deben liberar memoria usada para contener los datos convertidos. El atributo [transmit_as] indica a los códigos auxiliares que llamen a las rutinas de conversión proporcionadas por el usuario.
El tipo transmitido xmit-type debe resolverse en un tipo base MIDL, un tipo predefinido o un identificador de tipo. Para obtener más información, vea Tipos base MIDL.
El usuario debe proporcionar las siguientes rutinas.
Nombre de rutina | Descripción |
---|---|
type-id**_to_xmit** | Convierte los datos del tipo presentado en el tipo transmitido. Esta rutina asigna memoria para el tipo transmitido y para los datos a los que hacen referencia los punteros del tipo transmitido. |
type-id**_from_xmit** | Convierte los datos del tipo transmitido en el tipo presentado. Esta rutina es responsable de asignar memoria para los datos a los que hacen referencia los punteros del tipo presentado. RPC asigna memoria para el propio tipo. |
type-id**_free_inst** | Libera memoria asignada para los datos a los que hacen referencia los punteros del tipo presentado. RPC libera memoria para el propio tipo. |
type-id**_free_xmit** | Libera el almacenamiento utilizado por el autor de la llamada para el tipo transmitido y para los datos a los que hacen referencia los punteros del tipo transmitido. |
El código auxiliar del cliente llama a type-id**_to_xmit** para asignar espacio para el tipo transmitido y para traducir los datos en objetos de tipo xmit-type. El código auxiliar del servidor asigna espacio para el tipo de datos original y llama a type-id**_from_xmit** para traducir los datos de su tipo transmitido al tipo presentado.
Tras la devolución del código de aplicación, el código auxiliar del servidor llama a type-id**_free_inst** para desasignar el almacenamiento para type-id en el lado servidor. El código auxiliar de cliente llama a type-id**_free_xmit** para desasignar el almacenamiento de tipo xmit en el lado cliente.
Los siguientes tipos no pueden tener un atributo [transmit_as]:
- Identificadores de contexto (tipos con el atributo de tipo [context_handle] y tipos que se usan como parámetros con el atributo [context_handle] )
- Tipos que son canalizaciones o derivadas de canalizaciones
- Tipos de datos que se usan como tipo base de una definición de canalización
- Parámetros que son punteros o se resuelven en punteros
- Parámetros que son compatibles, variables o matrices abiertas
- Estructuras que contienen matrices compatibles
- Tipo predefinido handle_t, void
Los tipos que se transmiten deben cumplir las siguientes restricciones:
- No deben ser punteros ni contener punteros.
- No deben ser tuberías ni contener tuberías.
Ejemplos
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 *);
Vea también