다음을 통해 공유


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를 사용하여 목록 노드를 목록 끝에 추가하고 pNextpPrevious 포인터를 적절한 값에 할당합니다.

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