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

Matrici

Tipi di base MIDL

context_handle

Enum

Gestire

handle_t

File IDL (Interface Definition)

Ignorare

ptr

Ref

Stringa

Struct

switch_type

Typedef

Unione

Unico

void