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.