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

Matrices

Tipos base MIDL

context_handle

Enum

Manejar

handle_t

Archivo de definición de interfaz (IDL)

Ignorar

Ptr

Ref

string

Estructura

switch_type

Typedef

union

Único

Vacío