Puntatori (RPC)
Un puntatore comune è definito come tutto diverso dai puntatori di interfaccia e dai puntatori di conteggio dei byte.
Per la descrizione sono disponibili due layout possibili:
pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD
–oppure–
pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>
Il primo formato viene usato se il puntatore è un puntatore a un tipo semplice o un puntatore di stringa non formattato. Il secondo formato viene usato per i puntatori a tutti gli altri tipi. Gli attributi del puntatore indicano il layout della descrizione con il flag di FC_SIMPLE_POINTER.
<pointer_type 1> è uno dei seguenti.
Formato carattere | Descrizione |
---|---|
FC_RP | Puntatore di riferimento. |
FC_UP | Puntatore univoco. |
FC_FP | Puntatore completo. |
FC_OP | Puntatore univoco in un'interfaccia dell'oggetto. |
Il motivo per distinguere FC_OP è semantico: nelle interfacce dell'oggetto, un puntatore [in,out] deve essere liberato prima di annullare ilmarshaling di un nuovo oggetto e assegnare un nuovo valore puntatore.
<Pointer_attributes 1> può avere uno dei flag visualizzati nella tabella seguente.
Attributo | Flag | Descrizione |
---|---|---|
01 | FC_ALLOCATE_ALL_NODES | Il puntatore fa parte di uno schema di allocazione allocato(all_nodes). |
02 | FC_DONT_FREE | Puntatore allocato(dont_free). |
04 | FC_ALLOCED_ON_STACK | Puntatore il cui riferimento viene allocato nello stack di stub. |
08 | FC_SIMPLE_POINTER | Puntatore a un tipo semplice o stringa non conforme. Questo flag impostato indica il layout della descrizione del puntatore come layout del puntatore semplice descritto in precedenza, altrimenti viene indicato il formato descrittore con l'offset. |
10 | FC_POINTER_DEREF | Puntatore che deve essere dereferenziato prima di gestire il riferimento del puntatore. |
I puntatori che dispongono di size_is(), max_is(), length_is(), last_is() e/o first_is() hanno descrizioni di stringa di formato identiche a una matrice del tipo appropriato (ad esempio, una matrice conforme se size_is() viene applicata una matrice conforme se vengono applicate size_is() e length_is.
Una stringa di formato del puntatore dell'interfaccia oggetto ha uno dei due formati, a seconda che l'IID corrispondente sia noto al compilatore.
Un puntatore dell'interfaccia con un IID costante ha la descrizione seguente:
FC_IP FC_CONSTANT_IID
iid<16>
La parte iid 16> è l'IID<effettivo per il puntatore dell'interfaccia. L'iid viene scritto nella stringa di formato in un formato identico alla struttura dati GUID: long, short, short, char [8].
La descrizione di un puntatore di interfaccia con iid_is() applicata è:
FC_IP FC_PAD
iid_description<>
Il iid_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust . Il valore calcolato dalla funzione NdrComputeConformance è il puntatore IID.
I puntatori di conteggio byte sono correlati a un attributo di ottimizzazione speciale denominato [byte_count]. Vengono usati i formati seguenti:
FC_BYTE_COUNT_POINTER
simple_type<1>
byte_count_description<>
–E–
FC_BYTE_COUNT_POINTER
FC_PAD
byte_count_description<>
pointee_description<>
Il byte_count_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust .
Il pointee_description<> è una descrizione del tipo di puntatore.