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.<<>
Argomenti correlati