Die type_to_xmit-Funktion
Die Stubs rufen die type_to_xmit-Funktion auf, um den von der Anwendung bereitgestellten Typ in den übertragenen Typ zu konvertieren. Die Funktion ist definiert wie folgt:
void __RPC_USER <type>_to_xmit (
<type> __RPC_FAR *, <xmit_type> __RPC_FAR * __RPC_FAR *);
Der erste Parameter ist ein Zeiger auf die Anwendungsdaten. Der zweite Parameter wird von der Funktion so festgelegt, dass er auf die übertragenen Daten verweist. Die Funktion muss Arbeitsspeicher für den übertragenen Typ zuordnen.
Im folgenden Beispiel ruft der Client die Remoteprozedur auf, die über einen [in, out] -Parameter vom Typ DOUBLE_LINK_TYPE verfügt. Der Client-Stub ruft die type_to_xmit-Funktion auf, die hier DOUBLE_LINK_TYPE_to_xmit genannt wird, um doppelt verknüpfte Listendaten in ein Array der Größe zu konvertieren.
Die Funktion bestimmt die Anzahl der Elemente in der Liste, weist ein Array zu, das groß genug ist, um diese Elemente aufzunehmen, und kopiert dann die Listenelemente in das Array. Bevor die Funktion zurückgibt, wird der zweite Parameter ppArray so festgelegt, dass er auf die neu zugeordnete Datenstruktur verweist.
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;
}