Поделиться через


Представление данных

Вычислительные среды могут значительно отличаться, так как могут быть сетевые архитектуры. Для удовлетворения этих различий MIDL позволяет изменять способ представления данных. Иногда можно упростить разработку, преобразовав данные в формат, который приложение может более легко обрабатывать. Вы можете изменить формат данных приложения, чтобы его можно было более эффективно передавать по сети.

Атрибуты [transmit_as] и [represent_as] ] указывают компилятору связать трансмисный тип, который заглушки передается между клиентом и сервером, с типом пользователя, используемым клиентскими и серверными приложениями. Необходимо указать подпрограммы, которые выполняют преобразование между типом пользователя и трансмиссивным типом, и подпрограммами, чтобы освободить память, используемую для хранения преобразованных данных. Использование атрибута IDL [transmit_as] или атрибута ACF [represent_as] ACF указывает заглушку вызывать эти подпрограммы преобразования до и после передачи. Атрибут [transmit_as] позволяет преобразовать один тип данных в другой тип данных для передачи по сети. Атрибут [represent_as] позволяет управлять способом представления данных из сети приложению.

Атрибуты [wire_marshal] и [user_marshal] — это расширения Майкрософт для IDL OSF-DCE. Их синтаксис и функциональные возможности аналогичны атрибутам [transmit_as], заданным DCE, и [represent_as] атрибутам соответственно. Разница заключается в том, что вместо преобразования данных из одного типа в другой вы маршалинге данных напрямую. Для этого необходимо предоставить внешние подпрограммы для изменения размера буфера данных на стороне клиента и сервера, маршалинга и отмены сортировки данных на стороне клиента и сервера и освобождения данных на стороне сервера. Компилятор MIDL создает коды формата, которые указывают подсистеме NDR вызывать эти внешние подпрограммы при необходимости.

Атрибуты [wire_marshal] и [user_marshal] позволяют маршалировать типы данных, которые в противном случае нельзя передавать через границы процесса. Кроме того, поскольку с преобразованием типов меньше затрат, [wire_marshal] и [user_marshal] обеспечивают улучшенную производительность во время выполнения, по сравнению с [transmit_as] и [represent_as]. Атрибуты [wire_marshal] и [user_marshal] являются взаимоисключающими в отношении друг друга и относительно [transmit_as] и атрибутов [represent_as].

Важно отметить, что реализация [wire_marshal] и атрибутов [user_marshal] должна соответствовать правилам маршалинга, диктуемым спецификацией OSF-DCE. По этой причине использование этих атрибутов не рекомендуется, если вы не знакомы с протоколом провода. Дополнительные сведения о передаче синтаксиса NDR см. в www.opengroup.org.

В этом разделе представлен краткий обзор этих атрибутов MIDL в следующих разделах: