Función type_from_xmit
Los códigos auxiliares llaman a la función type_from_xmit para convertir datos de su tipo transmitido al tipo que se presenta a la aplicación. La función se define como:
void __RPC_USER <type>_from_xmit (
<xmit_type> __RPC_FAR *,
<type> __RPC_FAR *);
El primer parámetro es un puntero a los datos transmitidos. La función establece el segundo parámetro para que apunte a los datos presentados.
La función type_from_xmit debe administrar la memoria para el tipo presentado. La función debe asignar memoria para toda la estructura de datos que comienza en la dirección indicada por el segundo parámetro, excepto para el propio parámetro (el código auxiliar asigna memoria para el nodo raíz y lo pasa a la función). El valor del segundo parámetro no puede cambiar durante la llamada. La función puede cambiar el contenido en esa dirección.
En este ejemplo, la función DOUBLE_LINK_TYPE_from_xmit convierte la matriz de tamaño en una lista vinculada doble. La función conserva el puntero válido al principio de la lista, libera memoria asociada al resto de la lista y, a continuación, crea una nueva lista que comienza en el mismo puntero. La función usa una función de utilidad, InsertNewNode, para anexar un nodo de lista al final de la lista y asignar los punteros de pNext y pPrevious a los valores adecuados.
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;
}