атрибут 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;