Compartilhar via


A função type_from_xmit

Os stubs chamam a função type_from_xmit para converter dados de seu tipo transmitido para o tipo apresentado ao aplicativo. A função é definida como:

void __RPC_USER <type>_from_xmit ( 
    <xmit_type> __RPC_FAR *, 
    <type> __RPC_FAR *);

O primeiro parâmetro é um ponteiro para os dados transmitidos. A função define o segundo parâmetro para apontar para os dados apresentados.

A função type_from_xmit deve gerenciar a memória do tipo apresentado. A função deve alocar memória para toda a estrutura de dados que começa no endereço indicado pelo segundo parâmetro, exceto para o próprio parâmetro (o stub aloca memória para o nó raiz e a passa para a função). O valor do segundo parâmetro não pode ser alterado durante a chamada. A função pode alterar o conteúdo nesse endereço.

Neste exemplo, a função DOUBLE_LINK_TYPE_from_xmit converte a matriz dimensionada em uma lista vinculada duas vezes. A função retém o ponteiro válido para o início da lista, libera a memória associada ao restante da lista e cria uma nova lista que começa no mesmo ponteiro. A função usa uma função de utilitário, InsertNewNode, para acrescentar um nó de lista ao final da lista e atribuir os ponteiros pNext e pPrevious a valores apropriados.

void __RPC_USER DOUBLE_LINK_TYPE_from_xmit(
     DOUBLE_XMIT_TYPE __RPC_FAR * pArray,
     DOUBLE_LINK_TYPE __RPC_FAR * pList)
{
    DOUBLE_LINK_TYPE *pCurrent;
    int i;
 
    if (pArray->sSize <= 0) 
    {  
        // error checking
        return;
    }
 
    if (pList == NULL) // if invalid, create the list head
        pList = InsertNewNode(pArray->asNumber[0], NULL);             
    else 
    {    
        DOUBLE_LINK_TYPE_free_inst(pList);  // free all other nodes
        pList->sNumber = pArray->asNumber[0];
        pList->pNext = NULL; 
    }
 
    pCurrent = pList; 
    for (i = 1; i < pArray->sSize; i++)  
        pCurrent = InsertNewNode(pArray->asNumber[i], pCurrent);
    
    return;
}