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 formaté. Le deuxième format est utilisé pour les pointeurs vers tous les autres types. Les attributs de pointeur indiquent de quelle disposition de description il s’agit 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 pour 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’affecter une nouvelle valeur de pointeur.

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

Attribut Indicateur Description
01 FC_ALLOCATE_ALL_NODES Le pointeur fait partie d’un schéma d’allocation d’allocation d’allocation (all_nodes).
02 FC_DONT_FREE Pointeur d’allocation(dont_free).
04 FC_ALLOCED_ON_STACK Pointeur dont le référent est alloué sur la pile du stub.
08 FC_SIMPLE_POINTER Pointeur vers un type simple ou une chaîne conforme non formatée. Cet indicateur défini indique la disposition de la description du pointeur comme la disposition de pointeur 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érencé avant de gérer le référentiel du pointeur.

 

Les pointeurs auxquels size_is(), max_is(), length_is(), last_is() et/ou first_is() sont appliqués ont des descriptions de chaîne de format identiques à celles d’un pointeur vers un tableau du type approprié (par exemple, un tableau conforme si size_is() est appliqué, un tableau de variation 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 compilateur connaît ou non l’IID correspondant.

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. L’iid est écrit dans la chaîne de format dans un format identique à la structure de données GUID : long, short, short, char [8].

La description d’un pointeur d’interface auquel est appliqué iid_is() est la suivante :

FC_IP FC_PAD 
iid_description<> 

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

Pointeurs de nombre d’octets

Les pointeurs de nombre d’octets se rapportent à 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 qui a 4 ou 6 octets selon que /robust est utilisé ou non.

Le pointee_description<> est une description du type pointee.