多个管道的规则

可以在单个调用中以任意组合方式组合 [in]、[out]和 [in, out] 管道参数,但必须按特定顺序处理管道,如以下伪代码示例所示:

注意

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