Leggere in inglese

Condividi tramite


Puntatori (RPC)

Puntatori comuni

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.

Puntatori di interfaccia

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.

Puntatori di conteggio byte

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.