Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Заглушки вызывают функцию 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;
}