Condividi tramite


Marshalling utenti

Il marshalling utente ha una stringa di formato simile a transmit_as:

FC_USER_MARSHAL
flags<1>
quadruple_index<2>
user_type_memory_size<2>
transmitted_type_buffer size<2>
offset_to_the_transmitted_type<2>

I flag<1> byte sono costituiti dalla nibble del flag superiore e dalla nibble di allineamento inferiore.

I 2 bit superiori del flag vengono usati per descrivere se il tipo di filo è definito come puntatore univoco, puntatore di riferimento o nessun puntatore (non può essere un ptr). I manifesti seguenti sono stati definiti per impostare/ottenere i flag:

#define USER_MARSHAL_UNIQUE         0x80
#define USER_MARSHAL_REF            0x40
#define USER_MARSHAL_POINTER        0xc0  /* unique or ref */
#define USER_MARSHAL_IID            0x20  /* JIT compiler only */

L'allineamento della parola flag mantiene l'allineamento del filo del tipo trasmesso.

L'quadruple_index<2> è un indice della routine di callback per l'esecuzione del marshalling delle funzioni di marshalling dell'utente. Le posizioni di routine sono le seguenti: ridimensionamento, marshalling, annullamento delmarshaling e routine di liberamento.

Il user_type_memory_size<2> fornisce una dimensione per il tipo specifico dell'utente, inclusi i tipi sconosciuti.

Il transmitted_type_buffer_size<2> è zero quando la dimensione è variabile o la dimensione fissa effettiva. Si tratta di un'ottimizzazione che consente a MIDL di ignorare i callback durante il ridimensionamento del buffer e anche quando si libera.

Intervallo

Il controllo [intervallo] fornisce mezzi aggiuntivi per la convalida degli argomenti a livello NDR. Il descrittore [range] ha il formato seguente:

FC_RANGE,   flags_type <1>
low value<4>
high value<4>

I flag accettano il nibble superiore e il tipo il nibble inferiore del secondo byte.The flags take the upper nibble and the type the lower nibble of the second byte. I valori bassi e alti dipendono dal tipo della variabile da controllare.

Le bandiere sono concepite come veicolo di espansione; il compilatore ha impostato il nibble su zero.