Поделиться через


Функция type_UserUnmarshal

Функция>_UserUnmarshal типа<является вспомогательной функцией для атрибутов [ wire_marshal] и [ user_marshal] . Заглушки вызывают эту функцию для отмены обмена данными на стороне клиента или сервера. Функция определяется следующим образом:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserUnmarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

Тип <> в имени функции означает тип пользователя, указанный в определении типа [wire_marshal] или [user_marshal]. Этот тип может быть неизменяемым или даже ( если используется с атрибутом [user_marshal], неизвестным компилятору MIDL. Имя типа провода (имя трансмисного типа) не используется в прототипе функции. Обратите внимание, что тип провода определяет макет провода для данных, указанных OSF DCE.

Параметр pFlags — это указатель на поле флага без знака длинного. Верхний слово флага содержит флаги представления данных NDR, определенные OSF DCE для с плавающей запятой, порядка байтов и символьных представлений. Нижнее слово содержит флаг контекста маршалинга, как определено каналом COM. Точный макет флагов в поле описан в Функция type_UserSize.

Параметр pBuffer является текущим указателем буфера. Этот указатель может быть выровнен или не выровнен в записи. Функция <типа>_UserUnmarshal должна соответствующим образом выравнивать указатель буфера, немаршаливать данные и возвращать новую позицию буфера, которая является адресом первого байта после немаршализованного объекта.

Параметр pMyObj является указателем на определяемый пользователем объект типа.

В разнородной среде подсистема NDR выполняет любое преобразование данных, необходимое перед вызовом функции>_UserUnmarshal типа<. Обратите внимание, что подсистема NDR выполняет это преобразование данных в соответствии с определением типа проводного типа, предоставленного для этого типа данных пользователя. Флаг указывает представление данных отправителя.

правила маршалирования для user_marshal и wire_marshal

wire_marshal

user_marshal