Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
För att börja ta emot data från en server anropar en klient en av serverns fjärrprocedurer. Den här proceduren måste anropa push-proceduren upprepade gånger i serverns stub. MIDL-kompilatorn använder programmets IDL-fil för att automatiskt generera serverns push-procedur.
Fjärrserverrutinen måste fylla utdatarörets buffert med data innan den anropar push-proceduren. Varje gång serverprogrammet anropar pushproceduren i sin stub, paketerar pushproceduren data och överför dem till klienten. Loopen fortsätter tills servern skickar en buffert med noll längd.
Följande exempel är från Pipedemo-programmet som finns i exemplen som medföljer Windows SDK. Den illustrerar en fjärrserverprocedur som använder ett rör för att skicka data från servern till klienten.
void OutPipe(LONG_PIPE *outputPipe )
{
long *outputPipeData;
ulong index = 0;
ulong elementsToSend = PIPE_TRANSFER_SIZE;
/* Allocate memory for the data to be passed back in the pipe */
outputPipeData = (long *)malloc( sizeof(long) * PIPE_SIZE );
while(elementsToSend >0) /* Loop to send pipe data elements */
{
if (index >= PIPE_SIZE)
elementsToSend = 0;
else
{
if ( (index + PIPE_TRANSFER_SIZE) > PIPE_SIZE )
elementsToSend = PIPE_SIZE - index;
else
elementsToSend = PIPE_TRANSFER_SIZE;
}
outputPipe->push( outputPipe->state,
&(outputPipeData[index]),
elementsToSend );
index += elementsToSend;
} //end while
free((void *)outputPipeData);
}
Relaterade ämnen