[入力、size_is] と [出力、size_is] プロトタイプ
次の関数プロトタイプでは、カウントされた 2 つの文字列を使用します。 開発者は、文字配列の長さを追跡し、送信する配列要素の数をスタブに指示するパラメーターを渡すために、クライアントとサーバーの両方でコードを記述する必要があります。
void Analyze(
[in, length_is(cbIn), size_is(STRSIZE)] char achIn[],
[in] long cbIn,
[out, length_is(*pcbOut), size_is(STRSIZE)] char achOut[],
[out] long *pcbOut);
配列の長さを記述するパラメーターは、配列と同じ方向に送信されることに注意してください。 cbIn と achIn は [in] パラメーター、 pcbOut と achOut は [out] パラメーターです。 [out] パラメーターとして、パラメーター pcbOut は C 規則に従い、ポインターとして宣言する必要があります。
クライアント コードは、次に示すように、リモート プロシージャを呼び出す前に、文字列内の文字数 (末尾の 0 を含む) をカウントします。
/* client */
char achIn[STRSIZE], achOut[STRSIZE];
long cbIn, cbOut;
...
gets_s(achIn, STRSIZE); // get patient input
cbIn = strlen(achIn) + 1; // transmitted elements
Analyze(achIn, cbIn, achOut, &cbOut);
サーバー上のリモート プロシージャは、次に示すように 、cbOut に戻りバッファーの長さを提供します。
/* server */
void Analyze(char *pchIn,
long cbIn,
char *pchOut,
long *pcbOut)
{
...
*pcbOut = strlen(pchOut) + 1; // transmitted elements
return;
}
[string] 属性は、パラメーターが文字列であることがわかっている場合に使用できます。 この属性は、スタブに文字列サイズの計算を指示するため、[length is] パラメーターに関連するオーバーヘッドが排除されます。 さらに、パラメーターをアプリケーションに渡す前に、スタブに対して文字列が NULL で終了することを確認するように指示されます。