Compartilhar via


A função type_to_xmit

Os stubs chamam a função type_to_xmit para converter o tipo apresentado pelo aplicativo no tipo transmitido. A função é definida como:

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

O primeiro parâmetro é um ponteiro para os dados do aplicativo. O segundo parâmetro é definido pela função para apontar para os dados transmitidos. A função deve alocar memória para o tipo transmitido.

No exemplo a seguir, o cliente chama o procedimento remoto que tem um parâmetro [in, out] do tipo DOUBLE_LINK_TYPE. O stub do cliente chama a função type_to_xmit , aqui chamada DOUBLE_LINK_TYPE_to_xmit, para converter dados de lista vinculada duas vezes em uma matriz de tamanho.

A função determina o número de elementos na lista, aloca uma matriz grande o suficiente para manter esses elementos e copia os elementos da lista para a matriz. Antes que a função retorne, o segundo parâmetro, ppArray, é definido para apontar para a estrutura de dados recém-alocada.

void __RPC_USER DOUBLE_LINK_TYPE_to_xmit ( 
    DOUBLE_LINK_TYPE __RPC_FAR * pList, 
    DOUBLE_XMIT_TYPE __RPC_FAR * __RPC_FAR * ppArray)
{
    short cCount = 0;
    DOUBLE_LINK_TYPE * pHead = pList;  // save pointer to start 
    DOUBLE_XMIT_TYPE * pArray;
 
    /* count the number of elements to allocate memory */
    for (; pList != NULL; pList = pList->pNext)
        cCount++;
 
    /* allocate the memory for the array */
    pArray = (DOUBLE_XMIT_TYPE *) MIDL_user_allocate 
         (sizeof(DOUBLE_XMIT_TYPE) + (cCount * sizeof(short)));
    pArray->sSize = cCount;
 
    /* copy the linked list contents into the array */
    cCount = 0;
    for (i = 0, pList = pHead; pList != NULL; pList = pList->pNext)
        pArray->asNumber[cCount++] = pList->sNumber;
 
    /* return the address of the pointer to the array */
    *ppArray = pArray;
}