Функция type_UserSize
Функция>_UserSize типа<является вспомогательной функцией для атрибутов [ wire_marshal] и [ user_marshal] . Заглушки вызывают эту функцию для размера буфера данных RPC для объекта данных пользователя перед маршалингом данных на стороне клиента или сервера. Функция определяется следующим образом:
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
Тип <> в имени функции означает тип пользователя, как указано в определении типа [wire_marshal] или [user_marshal]. Этот тип может быть неизменяемым или даже ( если используется с атрибутом [user_marshal] — неизвестным компилятору MIDL. Имя типа провода (имя типа, передаваемого по сети), не используется в прототипе функции. Обратите внимание, что тип провода определяет макет данных, указанных OSF DCE. Все данные должны быть преобразованы в формат представления сетевых данных (NDR).
Параметр pFlags — это указатель на поле флага без знака длинного. Верхний слово флага содержит флаги формата NDR, определенные OSF DCE для плавающей точки, порядка байтов и символьных представлений. Нижнее слово содержит флаг контекста маршалинга, как определено каналом COM. Точный макет флагов в поле показан в следующей таблице.
Биты | Флаг | Ценность |
---|---|---|
31-24 | Представление с плавающей запятой | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
23-20 | Целое число и порядок байтов с плавающей запятой | 0 = Big-endian 1 = Little-endian |
19-16 | Представление символов | 0 = ASCII 1 = EBCDIC |
15-0 | Флаг контекста маршалинга | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
Флаг контекста маршалинга позволяет изменить поведение подпрограммы в зависимости от контекста вызова RPC. Например, если у вас есть дескриптор (длинная) в блок данных, можно отправить дескриптор для вызова в процессе, но вы отправите фактические данные для вызова на другой компьютер. Флаг контекста маршалинга и его значения определяются в файлах Wtypes.h и Wtypes.idl в пакете средств разработки программного обеспечения платформы (SDK).
Заметка
При правильном определении типа провода не требуется использовать флаги формата NDR, так как подсистема NDR выполняет необходимые преобразования.
Параметр StartingSize является текущим смещением буфера. Начальный размер указывает смещение буфера для объекта пользователя и может быть неправильно выровнено. Ваша подпрограмма должна учитывать любое необходимое заполнение.
Параметр pMyObj является указателем на объект типа пользователя.
Возвращаемое значение — это новое смещение или позиция буфера. Функция должна возвращать накопительный размер, который является начальным и возможным заполнением, а также размером данных.
Функция>_UserSize типа<может возвращать превышение необходимого размера. Фактический размер отправленного буфера определяется размером данных, а не размером выделения буфера.
Функция <типа>_UserSize не вызывается, если размер провода можно вычислить во время компиляции. Обратите внимание, что для большинства профсоюзов, даже если указателей нет, фактический размер представления провода можно определить только во время выполнения.
Связанные разделы