Condividi tramite


Attributo wire_marshal

L'attributo [ wire_marshal] è un attributo di tipo IDL simile nella sintassi a [ transmit_as], ma offre un modo più efficiente per effettuare il marshalling dei dati in una rete.

Usare l'attributo [wire_marshal] per specificare un tipo di dati che verrà trasmesso al posto del tipo di dati specifico dell'applicazione. Ogni tipo specifico dell'applicazione ha un tipo trasmettebile corrispondente che definisce la rappresentazione in transito (la rappresentazione usata nella rete). Il tipo specifico dell'applicazione non deve essere trasmesso, ma deve essere un tipo riconosciuto da MIDL. Per effettuare il marshalling di un tipo sconosciuto a MIDL, usare l'attributo ACF [ user_marshal].

Il tipo specifico dell'applicazione può essere un tipo semplice, composito o puntatore. La restrizione principale è che l'istanza del tipo deve avere una dimensione di memoria fissa e ben definita. Se le dimensioni dell'istanza del tipo devono essere modificate, usare un campo puntatore anziché una matrice conforme. In alternativa, è possibile definire un puntatore al tipo modificabile.

È necessario specificare le routine per il ridimensionamento, il marshalling e l'annullamento delmarshaing dei dati, oltre a liberare la memoria associata. Nella tabella seguente vengono descritti i quattro nomi di routine forniti dall'utente. Il <tipo è il tipo> userm specificato nella definizione del tipo [wire_marshal].

Routine Descrizione
<type>_UserSize Ridimensiona il buffer dei dati RPC prima del marshalling sul lato client o server.
<tipo>_UserMarshal Effettua il marshalling dei dati sul lato client o server.
<tipo>_UserUnmarshal Annulla ilmarshaling dei dati sul lato client o server.
<type>_UserFree Libera i dati sul lato server.

 

Queste routine fornite dal programmatore vengono fornite dal client o dall'applicazione server in base agli attributi direzionali.

Se il parametro è solo [ in], il client trasmette al server. Il client richiede le <funzioni type>_UserSize e <type>_UserMarshal . Il server richiede le <funzioni type_UserUnmarshal e type><>_UserFree.

Per un parametro [ out]-only, il server trasmette al client. Il server necessita del <tipo_UserSize e del tipo>>_UserMarshal funzioni, mentre il client richiede il tipo_UserMarshal funzione.<<>

Attributo user_marshal

Regole di marshalling per user_marshal e wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo