type_from_xmit函式
存根會呼叫 type_from_xmit 函式,將資料從傳輸的類型轉換成呈現給應用程式的類型。 函式定義為:
void __RPC_USER <type>_from_xmit (
<xmit_type> __RPC_FAR *,
<type> __RPC_FAR *);
第一個參數是已傳輸資料的指標。 函式會將第二個參數設定為指向所呈現的資料。
type_from_xmit函式必須管理所呈現類型的記憶體。 函式必須配置記憶體給從第二個參數指示的位址開始的整個資料結構,但參數本身 (存根節點配置記憶體,並將它傳遞給函式) 。 第二個參數的值無法在呼叫期間變更。 函式可以變更該位址的內容。
在此範例中,函式DOUBLE_LINK_TYPE_from_xmit將調整大小的陣列轉換成雙連結清單。 函式會保留清單開頭的有效指標、釋放與清單其餘部分相關聯的記憶體,然後建立從相同指標開始的新清單。 函式會使用公用程式函式 InsertNewNode,將清單節點附加至清單結尾,並將 pNext 和 pPrevious 指標指派給適當的值。
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;
}