次の方法で共有


[入力、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);

配列の長さを記述するパラメーターは、配列と同じ方向に送信されることに注意してください。 cbInachIn は [in] パラメーター、 pcbOutachOut は [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 で終了することを確認するように指示されます。