[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
}