in, out, string Prototype

The following function prototype uses a single in, out, string parameter for both the input and output strings. The string first contains patient input and is then overwritten with the doctor response as shown:

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

This example is similar to the one that employed a single-counted string for both input and output. As with that example, the size_is attribute determines the number of elements allocated on the server. The string attribute directs the stub to call strlen to determine the number of transmitted elements.

The client allocates all memory before the call as:

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

Note that the Analyze function no longer must calculate the length of the return string as it did in the counted-string example where the string attribute was not used. Now the length is calculated by the stubs as shown:

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