Rappresentazione dei dati
Gli ambienti di calcolo possono variare in modo significativo, in quanto possono essere architetture di rete. Per soddisfare queste differenze, MIDL consente di modificare la modalità di rappresentazione dei dati. A volte è possibile semplificare lo sviluppo convertendo i dati in un formato che l'applicazione può gestire più facilmente. È possibile modificare il formato dei dati dell'applicazione in modo che possa essere trasmesso in modo più efficiente in rete.
Gli attributi [transmit_as] e [represent_as] indicano al compilatore di associare un tipo trasmissibile che lo stub passa tra client e server, con un tipo di utente usato dalle applicazioni client e server. È necessario specificare le routine che eseguono la conversione tra il tipo utente e il tipo trasmissibile e le routine per rilasciare la memoria utilizzata per contenere i dati convertiti. L'uso dell'attributo IDL [transmit_as] o dell'attributo ACF [represent_as] indica allo stub di chiamare queste routine di conversione prima e dopo la trasmissione. L'attributo [transmit_as] consente di convertire un tipo di dati in un altro tipo di dati per la trasmissione in rete. L'attributo [represent_as] consente di controllare la modalità di presentazione dei dati dalla rete all'applicazione.
Gli attributi [wire_marshal] e [user_marshal] sono estensioni Microsoft per OSF-DCE IDL. La sintassi e la funzionalità sono simili a quella degli attributi [transmit_as] e [represent_as] specificati rispettivamente da DCE. La differenza è che, invece di convertire i dati da un tipo a un altro, si esegue direttamente il marshalling dei dati. A tale scopo, è necessario specificare le routine esterne per ridimensionare il buffer dei dati sui lati client e server, effettuare il marshalling e annullare ilmarshaing dei dati sui lati client e server e liberare i dati sul lato server. Il compilatore MIDL genera codici di formato che indicano al motore NDR di chiamare queste routine esterne quando necessario.
Gli attributi [wire_marshal] e [user_marshal] consentono di effettuare il marshalling dei tipi di dati che altrimenti non possono essere trasmessi attraverso i limiti del processo. Inoltre, poiché è presente un sovraccarico inferiore associato alla conversione del tipo, [wire_marshal] e [user_marshal] offrono prestazioni migliori in fase di esecuzione, rispetto a [transmit_as] e [represent_as]. Gli attributi [wire_marshal] e [user_marshal] si escludono a vicenda e rispetto agli attributi [transmit_as] e [represent_as] per un determinato tipo.
È importante notare che l'implementazione degli attributi [wire_marshal] e [user_marshal] deve seguire le regole di marshalling definite dalla specifica OSF-DCE. Per questo motivo, l'uso di questi attributi non è consigliato se non si ha familiarità con il protocollo di collegamento. Per altre informazioni sul trasferimento della sintassi NDR, vedere www.opengroup.org.
Questa sezione fornisce una breve panoramica di questi attributi MIDL, negli argomenti seguenti: