Pointeurs de référence
Les pointeurs de référence sont les pointeurs les plus simples et nécessitent le moins de traitement par le stub client. Lorsqu’un programme client transmet un pointeur de référence à une procédure distante, le pointeur de référence contient toujours l’adresse d’un bloc de mémoire valide. Il pointe toujours vers le même bloc de mémoire une fois la procédure distante terminée. Ces pointeurs sont principalement utilisés pour implémenter la sémantique de référence et pour autoriser [paramètres] en C.
Dans l’exemple suivant, la valeur du pointeur ne change pas pendant l’appel, bien que le contenu des données à l’adresse indiquée par le pointeur puisse changer.
Un pointeur de référence présente les caractéristiques suivantes :
- Il pointe toujours vers le stockage valide et n’a jamais la valeur NULL.
- Il ne change jamais pendant un appel et pointe toujours vers le même stockage avant et après l’appel.
- Les données retournées à partir de la procédure distante sont écrites dans le stockage existant.
- Le stockage vers lequel pointe un pointeur de référence ne peut pas être accessible par un autre pointeur ou tout autre nom dans la fonction.
Utilisez l’attribut [ref] pour spécifier des pointeurs de référence dans les définitions d’interface, comme illustré dans l’exemple suivant.
/* IDL file */
[
uuid(ba209999-0c6c-11d2-97cf-00c04f8eea45),
version(1.0)
]
interface RefPtrInterface
{
void RemoteFn([in, out, ref] char *pChar);
}
Cet exemple définit le paramètre pChar comme pointeur vers un seul caractère, et non un tableau de caractères. Il s’agit d’un paramètre [out] et d’un pointeur de référence qui pointe vers la mémoire que le serveur routine RemoteFn remplira avec des données.