Leggere in inglese

Condividi tramite


Puntatori (RPC)

Puntatori comuni

Un puntatore comune è definito come qualsiasi elemento diverso dai puntatori di interfaccia e dai puntatori al conteggio dei byte.

Per la descrizione sono disponibili due layout possibili:

pointer_type<1> pointer_attributes<1>
simple_type<1> FC_PAD

–o–

pointer_type<1> pointer_attributes<1>
offset_to_complex_description<2>

Il primo formato viene utilizzato se il puntatore è un puntatore a un tipo semplice o a un puntatore di stringa non ridimensionato. 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 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 oggetto.

 

Il motivo per distinguere FC_OP è semantico: nelle interfacce oggetto, un puntatore [in,out] deve essere liberato prima di separare un nuovo oggetto e assegnare un nuovo valore del puntatore.

Pointer_attributes<1> può avere uno dei flag illustrati nella tabella seguente.

Attributo Bandiera 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 referenziale viene allocato nello stack dello stub.
08 FC_SIMPLE_POINTER Puntatore a un tipo semplice o a una stringa non conforme. Questo flag impostato indica il layout della descrizione del puntatore come layout del puntatore semplice descritto in precedenza; in caso contrario, viene indicato il formato del descrittore con l'offset.
10 FC_POINTER_DEREF Puntatore che deve essere dereferenziato prima di gestire il referente del puntatore.

 

I puntatori a cui sono applicati size_is(), max_is(), length_is(), last_is() e/o first_is() hanno descrizioni di stringhe di formato identiche a un puntatore a una matrice del tipo appropriato(ad esempio, una matrice conforme se size_is() viene applicata, una matrice variabile conforme se vengono applicati size_is() e length_is).

Puntatori di interfaccia

Una stringa di formato del puntatore a interfaccia oggetto ha uno dei due formati, a seconda che l'IID corrispondente sia noto al compilatore.

Un puntatore di 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 all'interfaccia. L'iid viene scritto nella stringa di formato in un formato identico alla struttura dei dati GUID: long, short, short, char [8].

La descrizione di un puntatore a 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.

Puntatori conteggio byte

I puntatori al conteggio dei 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.