Partager via


Pointeurs (RPC)

Pointeurs courants

Un pointeur commun est défini comme tout autre que les pointeurs d’interface et les pointeurs de nombre d’octets.

Il existe deux dispositions possibles pour la description :

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

–ou–

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

Le premier format est utilisé si le pointeur est un pointeur vers un type simple ou un pointeur de chaîne non mis en forme. Le deuxième format est utilisé pour les pointeurs vers tous les autres types. Les attributs de pointeur indiquent la disposition de description avec l’indicateur FC_SIMPLE_POINTER.

pointer_type<1> est l’un des éléments suivants.

Caractère de mise en forme Description
FC_RP Pointeur de référence.
FC_UP Pointeur unique.
FC_FP Pointeur complet.
FC_OP Pointeur unique dans une interface objet.

 

La raison de distinguer FC_OP est sémantique : dans les interfaces d’objet, un pointeur [in,out] doit être libéré avant de démarshaler un nouvel objet et d’attribuer une nouvelle valeur de pointeur.

Pointer_attributes<1> pouvez avoir l’un des indicateurs indiqués dans le tableau suivant.

Attribut Drapeau Description
01 FC_ALLOCATE_ALL_NODES Le pointeur fait partie d’un schéma d’allocation allocate(all_nodes).
02 FC_DONT_FREE Pointeur allocate(dont_free).
04 FC_ALLOCED_ON_STACK Pointeur dont le référentiel est alloué sur la pile du stub.
08 FC_SIMPLE_POINTER Pointeur vers une chaîne de type simple ou non conforme. Cet indicateur étant défini indique la disposition de la description du pointeur comme disposition simple décrite ci-dessus, sinon le format de descripteur avec le décalage est indiqué.
10 FC_POINTER_DEREF Pointeur qui doit être déréférencement avant de gérer le référentiel du pointeur.

 

Les pointeurs qui ont size_is(), max_is(), length_is(), last_is() et/ou first_is() appliqués ont des descriptions de chaîne de format identiques à un pointeur vers un tableau du type approprié (par exemple, un tableau conforme si size_is() est appliqué, un tableau variable conforme si size_is() et length_is sont appliqués).

Pointeurs d’interface

Une chaîne de format pointeur d’interface objet a l’un des deux formats, selon que le IID correspondant est connu du compilateur.

Un pointeur d’interface avec une constante IID a la description suivante :

FC_IP FC_CONSTANT_IID 
iid<16>

La partie iid<16> est l’IID réel pour le pointeur d’interface. Le iid est écrit dans la chaîne de format dans un format identique à la structure de données GUID : long, court, court, court, char [8].

La description d’un pointeur d’interface avec iid_is() lui est appliquée :

FC_IP FC_PAD 
iid_description<> 

Le iid_description<> est un descripteur de corrélation et a 4 ou 6 octets selon que /robuste est utilisé. La valeur calculée par la fonction NdrComputeConformance est le pointeur IID.

Pointeurs de nombre d’octets

Les pointeurs de nombre d’octets sont liés à un attribut d’optimisation spécial appelé [byte_count]. Les formats suivants sont utilisés :

FC_BYTE_COUNT_POINTER 
simple_type<1>
byte_count_description<> 

–et–

FC_BYTE_COUNT_POINTER 
FC_PAD
byte_count_description<> 
pointee_description<>

Le byte_count_description<> est un descripteur de corrélation et a 4 ou 6 octets selon que /robuste est utilisé.

La pointee_description<> est une description du type pointe.