Поделиться через


[in, out, string] Прототип

Следующий прототип функции использует один параметр [в, , строк] для входных и выходных строк. Строка сначала содержит входные данные пациента и затем перезаписывается с помощью ответа врача, как показано ниже.

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

Этот пример аналогичен тому, который использовал одночисленную строку для входных и выходных данных. Как и в этом примере, атрибут [size_is] определяет количество элементов, выделенных на сервере. Атрибут [строка] направляет заглушку для вызова strlen для определения количества передаваемых элементов.

Клиент выделяет всю память перед вызовом следующим образом:

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

Обратите внимание, что функция анализа больше не должна вычислять длину возвращаемой строки, как это было в примере с подсчетом строк, где атрибут [string] не использовался. Теперь заглушки вычисляют длину, как показано ниже.

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