Compartilhar via


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