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