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