次の方法で共有


type_from_xmit関数

スタブは 、type_from_xmit 関数を呼び出して、送信された型からアプリケーションに提示される型にデータを変換します。 関数は次のように定義されます。

void __RPC_USER <type>_from_xmit ( 
    <xmit_type> __RPC_FAR *, 
    <type> __RPC_FAR *);

最初のパラメーターは、送信されたデータへのポインターです。 関数は、提示されたデータを指す 2 番目のパラメーターを設定します。

type_from_xmit関数は、提示された型のメモリを管理する必要があります。 関数は、パラメーター自体を除き、2 番目のパラメーターで示されるアドレスから始まるデータ構造全体にメモリを割り当てる必要があります (スタブはルート ノードのメモリを割り当てて関数に渡します)。 2 番目のパラメーターの値は、呼び出し中に変更できません。 関数は、そのアドレスの内容を変更できます。

この例では、関数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;
}