[entrada, salida, cadena] Prototipo
El prototipo de función siguiente usa un único parámetro [in, out, string] para las cadenas de entrada y salida. La cadena contiene primero la entrada del paciente y, a continuación, se sobrescribe con la respuesta del médico, como se muestra:
void Analyze([in, out, string, size_is(STRSIZE)] char achInOut[]);
Este ejemplo es similar al que empleó una cadena de recuento único para la entrada y la salida. Al igual que en ese ejemplo, el atributo [size_is] determina el número de elementos asignados en el servidor. El atributo [string] dirige el código auxiliar para llamar a strlen para determinar el número de elementos transmitidos.
El cliente asigna toda la memoria antes de la llamada como:
/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE); // get patient input
Analyze(achInOut);
printf("%s\n", achInOut); // display doctor response
Tenga en cuenta que la función Analyze ya no debe calcular la longitud de la cadena de retorno como hizo en el ejemplo de cadena contada donde no se usó el atributo [string]. Ahora los códigos auxiliares calculan la longitud como se muestra:
/* server */
void Analyze(char *pchInOut)
{
...
Respond(response, pchInOut); // don't need to call strlen
return; // stubs handle size
}