Bagikan melalui


Fungsi type_from_xmit

Stub memanggil fungsi type_from_xmit untuk mengonversi data dari jenis yang ditransmisikan ke jenis yang disajikan ke aplikasi. Fungsi ini didefinisikan sebagai:

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

Parameter pertama adalah penunjuk ke data yang dikirimkan. Fungsi mengatur parameter kedua untuk menunjuk ke data yang disajikan.

Fungsi type_from_xmit harus mengelola memori untuk jenis yang disajikan. Fungsi harus mengalokasikan memori untuk seluruh struktur data yang dimulai pada alamat yang ditunjukkan oleh parameter kedua, kecuali untuk parameter itu sendiri (stub mengalokasikan memori untuk simpul akar dan meneruskannya ke fungsi). Nilai parameter kedua tidak dapat berubah selama panggilan. Fungsi ini dapat mengubah konten di alamat tersebut.

Dalam contoh ini, fungsi DOUBLE_LINK_TYPE_from_xmit mengonversi array berukuran menjadi daftar yang ditautkan ganda. Fungsi ini mempertahankan penunjuk yang valid ke awal daftar, membebaskan memori yang terkait dengan daftar lainnya, lalu membuat daftar baru yang dimulai pada penunjuk yang sama. Fungsi ini menggunakan fungsi utilitas, InsertNewNode, untuk menambahkan simpul daftar ke akhir daftar dan untuk menetapkan pointer pNext dan pPrevious ke nilai yang sesuai.

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