共用方式為


在伺服器上實作輸出管道

若要開始從伺服器接收資料,用戶端會呼叫其中一個伺服器的遠端程式。 此程式必須重複呼叫伺服器存根中的推送程式。 MIDL 編譯器會使用應用程式的 IDL 檔案來自動產生伺服器的推送程式。

遠端伺服器常式必須先填入輸出管道的資料,才能呼叫推送程式。 每次伺服器程式在其存根中叫用推送程式時,推播程式會封送處理資料,並將其傳輸至用戶端。 迴圈會繼續執行,直到伺服器傳送長度為零的緩衝區為止。

下列範例來自隨附于 Windows SDK 的範例中包含的 Pipedemo 程式。 它說明使用管道將資料從伺服器推送至用戶端的遠端伺服器程式。

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

/Oi