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