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