атрибут pipe

Конструктор типа канала позволяет передавать открытый поток типизированных данных через удаленный вызов процедуры.

typedef pipe element-type pipe-declarator;

Параметры

тип элемента

Определяет размер одного элемента в буфере передачи. Тип элемента может быть базовым типом, predefined_type, структурой, перечислением 32b или идентификатором типа. К element_types применяется несколько ограничений, как описано в разделе Примечания ниже.

декларатор канала

Указывает один или несколько идентификаторов или указателей на идентификаторы. Разделяйте несколько деклараторов запятыми.

Комментарии

Конструктор типа канала можно использовать для передачи данных в обоих направлениях. Параметр канала [in] позволяет серверу извлекать поток данных из клиента во время удаленного вызова процедуры. Параметр канала [out] позволяет серверу отправлять поток данных обратно клиенту. Вы предоставляете клиентские подпрограммы для отправки и извлечения потока данных, а также для выделения глобального буфера для данных. Подпрограммы заглушки клиента и сервера маршалют и отменяют маршалирование данных и передают ссылку на буфер обратно в приложение.

К каналам применяются следующие ограничения:

  • Элемент конвейера не может быть или содержать указатель, соответствующий или изменяющийся массив, дескриптор или дескриптор контекста. Кроме того, в реализации каналов Майкрософт элемент канала не может быть или содержать объединение, перечисление 16b или __int3264.
  • Атрибуты [transmit_as], [represent_as], [wire_marshal] или [user_marshal] нельзя применять к типу конвейера или к типу элемента.
  • Тип канала не может быть членом структуры или объединения, целевым объектом указателя или базовым типом массива.
  • Тип данных, объявленный как тип канала, можно использовать только в качестве параметра удаленного вызова.
  • Параметр канала можно передать в любом направлении по значению или по ссылке ([ссылка] ). Однако атрибут [ptr] нельзя применить к каналу, который передается по ссылке. Невозможно указать параметр канала с [уникальным] или полным указателем независимо от направления.
  • Нельзя использовать каналы в интерфейсах [object] .
  • Атрибут [идемпотентный] нельзя применить к подпрограмме с параметром канала.
  • Атрибуты сериализации , [кодирование] и [декодирование] нельзя использовать с каналами.
  • Автоматические дескрипторы нельзя использовать по умолчанию или с атрибутом [auto_handle] с каналами.

Примечание

Компилятор MIDL поддерживает каналы только в режиме /Oif .

 

Дополнительные сведения о реализации подпрограмм с параметрами канала см. в разделе Каналы в руководстве и справочнике программиста RPC.

Примеры

typedef pipe unsigned char UCHAR_PIPE1, UCHAR_PIPE2;
 
//SIMPLE_STRUCT defined elsewhere
typedef pipe SIMPLE_STRUCT SIMPLE_STRUCT_PIPE;

См. также раздел

auto_handle

Базовые типы MIDL

decode

encode

Перечисления

idempotent

В

Объекта

Вне

Ptr

Ref

represent_as

Структура

transmit_as

Уникальный

user_marshal

wire_marshal