type_to_xmit 函数
存根调用 type_to_xmit 函数,以将应用程序呈现的类型转换为传输的类型。 函数定义为:
void __RPC_USER <type>_to_xmit (
<type> __RPC_FAR *, <xmit_type> __RPC_FAR * __RPC_FAR *);
第一个参数是指向应用程序数据的指针。 第二个参数由 函数设置为指向传输的数据。 函数必须为传输的类型分配内存。
在下面的示例中,客户端调用具有 类型为 DOUBLE_LINK_TYPE 的 [in, out] 参数的远程过程。 客户端存根调用 type_to_xmit 函数(此处名为 DOUBLE_LINK_TYPE_to_xmit),以将双链接列表数据转换为大小数组。
函数确定列表中的元素数,分配一个足够大的数组来容纳这些元素,然后将列表元素复制到数组中。 在函数返回之前,第二个参数 ppArray 设置为指向新分配的数据结构。
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;
}