Атрибут user_marshal
Атрибут [ user_marshal] — это атрибут типа ACF, аналогичный синтаксису [ represent_as]. Как и атрибут IDL, [ wire_marshal], он предлагает более эффективный способ маршализировать данные по сети. В качестве атрибута ACF [user_marshal] позволяет маршалировать пользовательские типы данных, неизвестные MIDL. У каждого конкретного приложения есть соответствующий передаваемый тип, определяющий представление провода.
Тип приложения может быть простым, составным или указателем. Основное ограничение заключается в том, что экземпляр типа должен иметь фиксированный, хорошо определенный размер памяти. Если размер экземпляра типа необходимо изменить, используйте поле указателя, а не соответствующий массив. Кроме того, можно определить указатель на изменяемый тип.
Как и в случае с атрибутом [wire_marshal], вы предоставляете подпрограммы для изменения размера, маршалинга, отмены маршалинга и освобождения проходов. В следующей таблице описаны четыре имена подпрограмм, предоставленных пользователем. Тип <> — это тип пользовательского, указанный в определении типа [user_marshal].
Рутина | Описание |
---|---|
<типа>_UserSize | Размер буфера данных RPC перед маршалингом на стороне клиента или сервера. |
>_UserMarshal типа< | Маршалирует данные на стороне клиента или сервера. |
<типа>_UserUnmarshal | Отменяет анализ данных на стороне клиента или сервера. |
>_UserFree типа< | Освобождает данные на стороне сервера. |
Эти пользовательские подпрограммы предоставляются клиентом или серверным приложением на основе атрибутов направления.
Если параметр равен [только в], клиент передается серверу. Клиенту требуются функции>_UserSize типа<и <типа>_UserMarshal. Серверу требуется>_UserUnmarshal типа<и <>_UserFree функций.
Для параметра [out]-only сервер передает клиенту. Серверу требуются функции <типа>_UserSize и <типа>_UserMarshal, в то время как клиенту требуется функция <типа>_UserMarshal.
Связанные разделы