[in, out, prototype de chaîne ]

Le prototype de fonction suivant utilise un [ paramètre de chaîne in, outunique ] pour les chaînes d’entrée et de sortie. La chaîne contient tout d’abord l’entrée du patient et est ensuite remplacée par la réponse du médecin, comme indiqué ci-dessous :

void Analyze([in, out, string, size_is(STRSIZE)] char  achInOut[]);

Cet exemple est similaire à celui qui a utilisé une chaîne à comptage unique pour l’entrée et la sortie. Comme avec cet exemple, la [ taille _ est l' ] attribut qui détermine le nombre d’éléments alloués sur le serveur. L' [ attribut de chaîne ] indique au stub d’appeler strlen pour déterminer le nombre d’éléments transmis.

Le client alloue toute la mémoire avant l’appel en tant que :

/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE);            // get patient input
Analyze(achInOut);
printf("%s\n", achInOut);  // display doctor response

Notez que la fonction Analyze ne doit plus calculer la longueur de la chaîne de retour comme dans l’exemple compté de chaîne où l’attribut de [ chaîne ] n’a pas été utilisé. À présent, les stubs calculent la longueur comme indiqué :

/* server */
void Analyze(char *pchInOut)
{
   ...
   Respond(response, pchInOut); // don't need to call strlen
   return;                      // stubs handle size
}