Función type_to_xmit
Los códigos auxiliares llaman a la función type_to_xmit para convertir el tipo que presenta la aplicación en el tipo transmitido. La función se define como:
void __RPC_USER <type>_to_xmit (
<type> __RPC_FAR *, <xmit_type> __RPC_FAR * __RPC_FAR *);
El primer parámetro es un puntero a los datos de la aplicación. La función establece el segundo parámetro para que apunte a los datos transmitidos. La función debe asignar memoria para el tipo transmitido.
En el ejemplo siguiente, el cliente llama al procedimiento remoto que tiene un parámetro [in, out] de tipo DOUBLE_LINK_TYPE. El código auxiliar de cliente llama a la función type_to_xmit , aquí denominada DOUBLE_LINK_TYPE_to_xmit, para convertir los datos de lista de doble vínculo en una matriz de tamaño.
La función determina el número de elementos de la lista, asigna una matriz lo suficientemente grande como para contener esos elementos y, a continuación, copia los elementos de lista en la matriz. Antes de que la función devuelva, el segundo parámetro, ppArray, se establece para que apunte a la estructura de datos recién asignada.
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;
}