Regras para vários pipes
Você pode combinar os parâmetros de pipe [in], [out], and [in, out] em qualquer combinação em uma única chamada, mas você deve processar os pipes em uma ordem específica, conforme mostrado no exemplo de pseudocódigo a seguir:
Observação
Esse recurso não tem mais suporte no Windows Vista e em plataformas posteriores.
- Obtenha os dados de cada pipe de entrada, começando com o primeiro parâmetro (mais à esquerda) [in] e continuando em ordem, drenando cada pipe antes de começar a processar o próximo.
- Depois que cada pipe de entrada tiver sido completamente processado, envie os dados para os pipes de saída, começando novamente com o primeiro parâmetro [out] e continuando em ordem, preenchendo cada pipe antes de começar a processar o próximo.
//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