[in, out, string] Protótipo
O protótipo de função a seguir usa um único parâmetro [entrada, saída, cadeia de caracteres] para as cadeias de caracteres de entrada e saída. A cadeia de caracteres primeiro contém a entrada do paciente e, em seguida, é substituída pela resposta do médico, conforme mostrado:
void Analyze([in, out, string, size_is(STRSIZE)] char achInOut[]);
Este exemplo é semelhante ao que empregava uma cadeia de caracteres de contagem única para entrada e saída. Assim como acontece com esse exemplo, o atributo [size_is] determina o número de elementos alocados no servidor. O atributo [string] direciona o stub para chamar strlen para determinar o número de elementos transmitidos.
O cliente aloca toda a memória antes da chamada como:
/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE); // get patient input
Analyze(achInOut);
printf("%s\n", achInOut); // display doctor response
Observe que a função Analyze não deve mais calcular o comprimento da cadeia de caracteres de retorno como no exemplo de cadeia de caracteres contada em que o atributo [string] não foi usado. Agora, os stubs calculam o comprimento, conforme mostrado:
/* server */
void Analyze(char *pchInOut)
{
...
Respond(response, pchInOut); // don't need to call strlen
return; // stubs handle size
}