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;
}