[入力、出力、文字列]プロトタイプ
次の関数プロトタイプでは、入力文字列と出力文字列の両方に対して 1 つの [in, out, string] パラメーターを使用します。 文字列は最初に患者の入力を含み、次に示すように医師の応答で上書きされます。
void Analyze([in, out, string, size_is(STRSIZE)] char achInOut[]);
この例は、入力と出力の両方に単一カウント文字列を使用した例と似ています。 この例と同様に、[size_is] 属性によって、サーバーに割り当てられる要素の数が決まります。 [string] 属性は、送信される要素の数を決定するために strlen を呼び出すようにスタブに指示します。
クライアントは、呼び出しの前にすべてのメモリを次のように割り当てます。
/* client */
char achInOut[STRSIZE];
...
gets_s(achInOut, STRSIZE); // get patient input
Analyze(achInOut);
printf("%s\n", achInOut); // display doctor response
Analyze 関数は、counted-string の例で [string] 属性が使用されなかった場合と同様に、戻り文字列の長さを計算する必要はなくなりました。 次に示すように、スタブによって長さが計算されます。
/* server */
void Analyze(char *pchInOut)
{
...
Respond(response, pchInOut); // don't need to call strlen
return; // stubs handle size
}