Правила для нескольких каналов
Параметры канала [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