Fonction type_to_xmit
Les stubs appellent la fonction type_to_xmit pour convertir le type présenté par l’application en type transmis. La fonction est définie comme suit :
void __RPC_USER <type>_to_xmit (
<type> __RPC_FAR *, <xmit_type> __RPC_FAR * __RPC_FAR *);
Le premier paramètre est un pointeur vers les données d’application. Le deuxième paramètre est défini par la fonction pour pointer vers les données transmises. La fonction doit allouer de la mémoire pour le type transmis.
Dans l’exemple suivant, le client appelle la procédure distante qui a un paramètre [in, out] de type DOUBLE_LINK_TYPE. Le stub client appelle la fonction type_to_xmit , ici nommée DOUBLE_LINK_TYPE_to_xmit, pour convertir les données de liste doublement liées en un tableau dimensionné.
La fonction détermine le nombre d’éléments dans la liste, alloue un tableau suffisamment grand pour contenir ces éléments, puis copie les éléments de liste dans le tableau. Avant que la fonction ne retourne, le deuxième paramètre, ppArray, est défini pour pointer vers la structure de données nouvellement allouée.
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;
}