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.