Представление данных
Вычислительные среды могут значительно отличаться, так как могут быть сетевые архитектуры. Для удовлетворения этих различий 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 в следующих разделах:
- Атрибуты transmit_as и represent_as
- Атрибуты wire_marshal и user_marshal