複数のパイプのルール
[in]、[out]、および [in, out] パイプ パラメーターは、1 回の呼び出しで任意の組み合わせで結合できますが、次の擬似コード例に示すように、パイプを特定の順序で処理する必要があります。
注意
この機能は、Windows Vista 以降のプラットフォームではサポートされなくなりました。
- すべての入力パイプからデータを取得します。最初の (左端) [in] パラメーターから始まり、次の処理を開始する前に各パイプをドレインして順番に続行します。
- すべての入力パイプが完全に処理されたら、出力パイプのデータを送信し、最初の [out] パラメーターから再度開始し、順番に続行してから、次の処理を開始する前に各パイプを満たします。
//in .IDL file:
void InOutUCharPipe( [in,out] UCHAR_PIPE *uchar_pipe_1,
[out] UCHAR_PIPE * uchar_pipe_2,
[in] UCHAR_PIPE uchar_pipe_3);
//remote procedure:
void InOutUCharPipe( UCHAR_PIPE *param1,
UCHAR_PIPE *param2,
UCHAR_PIPE param3)
{
while(!END_OF_PIPE1)
{
param1->pull (. . .);
. . .
};
while(!END_OF_PIPE3)
{
param3.pull (. . .);
. . .
};
while(!END_OF_PIPE1)
{
param1->push (. . .);
. . .
};
while(!END_OF_PIPE2)
{
param2->push(. . .);
. . .
};
} //end InOutUCharPipe