Rules for Multiple Pipes

You can combine in, out, and in,out pipe parameters in any combination in a single call but you must process the pipes in a specific order, as shown in the following example:

//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(. . .)
. . .
};
return;
} //end InOutUCharPipe