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


Функция type_UserUnmarshal

Функция <type>_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);

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

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

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

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

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

Правила маршалинга для user_marshal и wire_marshal

wire_marshal

user_marshal