[in, out, string] Prototype

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

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 dans cet exemple, l’attribut [size_is] détermine le nombre d’éléments alloués sur le serveur. L’attribut [string] 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 comme suit :

/* 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 de chaîne comptée où l’attribut [string] n’a pas été utilisé. Maintenant, 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
}