transmit_as (attributo)
L'attributo [transmit_as] indica al compilatore di associare type-id*,* che è un tipo presentato che le applicazioni client e server modificano, con un tipo xmit-type trasmesso.
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 *);
Parametri
-
xmit-type
-
Specifica il tipo di dati trasmesso tra client e server.
-
type-attribute-list
-
Specifica uno o più attributi che si applicano al tipo. Gli attributi di tipo validi includono [handle], [switch_type]; l'attributo puntatore [ref], [unique]o [ptr]; e gli attributi di utilizzo [string] e [ignore]. Separare più attributi con virgole.
-
type-specifier
-
Specifica un tipo di base, uno struct, un'unione, un tipo di enumerazione o un identificatore di tipo. Una specifica di archiviazione facoltativa può precedere l'identificatore di tipo.
-
declarator-list
-
Specifica i dichiaratori C standard, ad esempio identificatori, dichiaratori di puntatore e dichiaratori di matrice. Per altre informazioni, vedere Array e Sized-Pointer Attributi, matrici e matricie puntatori. L'elenco dichiaratore è costituito da uno o più dichiaratori separati da virgole. Il dichiaratore di parametro nel dichiaratore di funzione, ad esempio il nome del parametro, è facoltativo.
-
type-id
-
Specifica il nome del tipo di dati presentato alle applicazioni client e server.
Commenti
Per utilizzare l'attributo [transmit_as] , l'utente deve fornire routine che converteno i dati tra i tipi presentati e trasmessi; queste routine devono anche liberare memoria utilizzata per contenere i dati convertiti. L'attributo [transmit_as] indica agli stub di chiamare le routine di conversione fornite dall'utente.
Il tipo trasmesso xmit-type deve essere risolto in un tipo di base MIDL, un tipo predefinito o un identificatore di tipo. Per altre informazioni, vedere Tipi di base MIDL.
L'utente deve fornire le routine seguenti.
Nome routine | Descrizione |
---|---|
type-id**_to_xmit** | Converte i dati dal tipo presentato al tipo trasmesso. Questa routine alloca memoria per il tipo trasmesso e per tutti i dati a cui fanno riferimento i puntatori nel tipo trasmesso. |
type-id**_from_xmit** | Converte i dati dal tipo trasmesso al tipo presentato. Questa routine è responsabile dell'allocazione della memoria per i dati a cui fanno riferimento i puntatori nel tipo presentato. RPC alloca memoria per il tipo stesso. |
type-id**_free_inst** | Libera la memoria allocata per i dati a cui fanno riferimento i puntatori nel tipo presentato. RPC libera memoria per il tipo stesso. |
type-id**_free_xmit** | Libera l'archiviazione usata dal chiamante per il tipo trasmesso e per i dati a cui fanno riferimento i puntatori nel tipo trasmesso. |
Lo stub client chiama type-id**_to_xmit** per allocare spazio per il tipo trasmesso e convertire i dati in oggetti di tipo xmit-type. Lo stub del server alloca spazio per il tipo di dati originale e chiama type-id**_from_xmit** per convertire i dati dal tipo trasmesso al tipo presentato.
Al termine della restituzione dal codice dell'applicazione, lo stub del server chiama type-id**_free_inst** per deallocare lo spazio di archiviazione per type-id sul lato server. Lo stub client chiama type-id**_free_xmit** per deallocare l'archiviazione di tipo xmit sul lato client.
I tipi seguenti non possono avere un attributo [transmit_as] :
- Handle di contesto (tipi con l'attributo e i tipi di tipo [context_handle] usati come parametri con l'attributo [context_handle] )
- Tipi che sono pipe o derivati da pipe
- Tipi di dati usati come tipo di base di una definizione di pipe
- Parametri che sono puntatori o risolti in puntatori
- Parametri conformi, variabili o matrici aperte
- Strutture che contengono matrici conformi
- Tipo predefinito handle_tvoid
I tipi trasmessi devono essere conformi alle restrizioni seguenti:
- Non devono essere puntatori o contenere puntatori.
- Non devono essere tubi o contenere tubi.
Esempi
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 *);
Vedere anche