Attributo user_marshal

L'attributo [ user_marshal] è un attributo di tipo ACF simile alla sintassi [ represent_as]. Come per l'attributo IDL, [ wire_marshal], offre un modo più efficiente per eseguire il marshalling dei dati in una rete. Come attributo ACF, [user_marshal] consente di eseguire il marshalling dei tipi di dati personalizzati sconosciuti a MIDL. Ogni tipo specifico dell'applicazione ha un tipo trasmessobile corrispondente che definisce la rappresentazione del filo.

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

Come con l'attributo [wire_marshal] , si forniscono routine per il ridimensionamento, il marshalling, l'annullamento delmarshaling e i passaggi di liberamento. La tabella seguente descrive i quattro nomi di routine forniti dall'utente. Il <tipo è il tipo> userm specificato nella definizione di tipo[user_marshal] .

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

 

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

Se il parametro è [ in] solo, il client trasmette al server. Il client necessita del <tipo_UserSize e del tipo>>_UserMarshal funzioni.< Il server necessita del <tipo_UserUnmarshal e del tipo>>_UserFree funzioni.<

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

Attributo wire_marshal

Regole di marshalling per il marshalling utente e wire_marshal

user_marshal

wire_marshal

NdrGetUserMarshalInfo