atributo represent_as
El atributo ACF [represent_as] asocia un tipo local con nombre en el tipo repr-type de idioma de destino con un tipo de transferencia denominado tipo que se transfiere entre el cliente y el servidor.
typedef [represent_as(repr-type) [[ , type-attribute-list ]] ] named-type;
void __RPC_USER named-type_from_local (
repr-type __RPC_FAR * ,
named-type __RPC_FAR * __RPC_FAR * );
void __RPC_USER named-type_to_local (
named-type __RPC_FAR * ,
repr-type __RPC_FAR * ); void __RPC_USER named-type _free_inst ( named-type __RPC_FAR * ); void __RPC_USER named-type _free_local ( repr-type __RPC_FAR * );
Parámetros
-
tipo con nombre
-
Especifica el tipo de datos de transferencia con nombre que se transfiere entre el cliente y el servidor.
-
type-attribute-list
-
Especifica uno o varios atributos que se aplican al tipo. Separe varios atributos con comas.
-
repr-type
-
Especifica el tipo local representado en el idioma de destino que se presenta a las aplicaciones cliente y servidor.
Comentarios
Al usar [represent_as], debe proporcionar rutinas que conviertan entre los tipos de transferencia locales y los tipos de transferencia y esa memoria libre usada para contener los datos convertidos. El atributo [represent_as] indica a los códigos auxiliares que llamen a las rutinas de conversión proporcionadas por el usuario.
El tipo transferido denominado-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.
Debe proporcionar las siguientes rutinas:
Nombre de rutina | Descripción |
---|---|
named_type**_from_local** | Convierte los datos del tipo local en el tipo de red. La rutina asigna memoria para el tipo de datos de red, incluida la memoria de los datos a los que hacen referencia los punteros del tipo de datos de red. |
named_type**_to_local** | Convierte los datos del tipo de red en el tipo local. La rutina es responsable de asignar memoria para los datos a los que hacen referencia los punteros en el tipo local. RPC asigna memoria para el propio tipo local. |
named_type**_free_local** | Libera memoria asignada para los datos a los que hacen referencia los punteros en el tipo local. RPC libera memoria para el propio tipo |
named_type**_free_inst** | Libera memoria asignada para los datos a los que hacen referencia los punteros en el tipo de red y para el propio tipo de red. |
El código auxiliar de cliente llama al tipo de cliente**_from_local** para asignar espacio para el tipo transmitido y traducir los datos del tipo local al tipo de red. El código auxiliar del servidor asigna espacio para el tipo de datos original y llama a named-type**_to_local** para traducir los datos del tipo de red al tipo local.
Tras devolver el código de la aplicación, los códigos auxiliares del cliente y del servidor llaman denominado-type**_free_inst** para desasignar el almacenamiento para el tipo de red. El código auxiliar de cliente llama al tipo de cliente**_free_local** para desasignar el almacenamiento devuelto por la rutina.
Los tipos siguientes no pueden tener un atributo [represent_as]:
- Matrices conformes, variables o conformes
- Estructuras en las que el último miembro es una matriz conforme (una estructura conforme)
- Punteros o tipos que contienen un puntero
- Canalizaciones o tipos que contienen canalizaciones
- Tipos que se usan como tipo base para una canalización
- Tipos predefinidos handle_t, void
- Tipos que tienen el atributo [handle]
Ejemplos
//these data types defined in .IDL or elsewhere
typedef struct _lbox
{
long data;
struct _lbox *next;
} lbox;
typedef [ref] lbox *PBOX_LOC;
typedef long LONG4[4];
//in .ACF file :
interface iface
{
typedef [ represent_as(PBOX_LOC) ] LONG4;
}
Vea también