_attribut ignore partiel

L’attribut CCP [ Partial _ ignore ] définit une version spécialisée de pointeurs [ uniques ] qui fournit une sémantique de sortie facultative.

[ [function-attribute-list <>] ] type-specifier <> [pointer- <>declarator <>] function-name <>( [ partial_ignore [ , parameter-attribute-list <> ] ] type-specifier <> [declarator <>] , ...);

Remarques

Lors de la création d’une fonction, il est courant de permettre aux utilisateurs de spécifier un pointeur non null vers des données de retour facultatives, souvent appelées pointeur facultatif-out. La mémoire vers laquelle pointe l’utilisateur n’est généralement pas obligatoirement initialisée. Cette technique représente un problème lorsque la fonction est utilisée sur RPC.

Si le pointeur facultatif-out est valide, mais qu’il pointe vers des données non initialisées, RPC tente de marshaler ces données et de les envoyer au serveur, ce qui peut entraîner l’échec du marshaling et l’abandon de l’appel. Même si le marshaling s’effectue correctement, un nombre potentiellement important de données inutiles sont envoyées au serveur.

Ces problèmes sont résolus en marquant le pointeur [ sur in, out, unique et _ Partial ] ignore. Les quatre attributs doivent être présents. Lorsqu’un pointeur [ _ ignore ] partiellement est marshalé côté client, les seules données envoyées au serveur sont un indicateur qui indique si le pointeur est null. Si le pointeur n’est pas null, la routine côté serveur reçoit un pointeur valide vers un bloc de mémoire qui a été initialisé avec des zéros. Si le pointeur a la valeur null, la routine côté serveur reçoit un pointeur null .

Dans ce cas, la taille maximale du pointeur doit être bien définie au moment de la compilation ou en fonction des paramètres d’entrée, car le serveur doit allouer de l’espace pour l’emplacement de la mémoire vers lequel pointe. Par exemple, un pointeur de [ chaîne ] simple n’a pas une taille bien définie, car la chaîne se termine implicitement par un caractère null. Dans ce cas, la spécification de la taille maximale de la chaîne par l’ajout d’une [ taille _ est ] que l’attribut permet d’obtenir la taille requise bien définie.

Exemples

/* The MoveLeft function will move one position to the left and optionally return the previous position */
void MoveLeft([in, out, unique, partial_ignore] long *pPrevPosition);

Voir aussi

unique