Implementera utdatapipor på servern

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);
 
}

rör

/Oi