Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция <типа>_UserMarshal является вспомогательной функцией для атрибутов [ wire_marshal] и [ user_marshal] . Заглушки вызывают эту функцию для маршалирования данных на стороне клиента или сервера. Функция определяется следующим образом:
unsigned char __RPC_FAR * __RPC_USER <type>_UserMarshal(
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 является текущим указателем буфера. Этот указатель может быть выровнен или не выровнен в записи. Функция <типа>_UserMarshal должна соответствующим образом выровнять указатель буфера, маршалировать данные и возвращать новую позицию буфера, которая является адресом первого байта после маршалированного объекта. Помните, что спецификация типа провода определяет фактический макет данных в буфере.
Параметр pMyObj является указателем на объект типа пользователя.
Возвращаемое значение — это новая позиция буфера, которая является адресом первого байта после немаршализованного объекта.
Переполнение буфера может возникать при неправильном вычислении размера данных и попытке маршалировать больше данных, чем ожидалось. Вы должны быть осторожны, чтобы избежать этой ситуации. Его можно проверить с помощью указателя, который <тип>_UserMarshal возвращается. В противном случае вы рискуете, что подсистема NDR вызывает исключение буферного переполнения позже.
Исключения должны быть пойманы и обработаны локально, исключения не должны быть разрешены для распространения стека вызовов.
Связанные разделы