Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All
COM
id
in
int
odl
out
ptr
ref
Expand Minimize

pipe attribute

The pipe type constructor makes it possible to transmit an open-ended stream of typed data across a remote procedure call.


typedef pipe element-type pipe-declarator;

Parameters

element-type

Defines the size of a single element in the transfer buffer. The element-type can be a base type, predefined_type, struct, 32b enum, or type identifier. Several restrictions apply to element_types, as described in Remarks, below.

pipe-declarator

Specifies one or more identifiers or pointers to identifiers. Separate multiple declarators with commas.

Remarks

You can use the pipe type constructor to transmit data in both directions. An [in] pipe parameter allows the server to pull the data stream from the client during a remote procedure call. An [out] pipe parameter allows the server to push the data stream back to the client. You supply the client-side routines to push and pull the data stream and to allocate a global buffer for the data. The client and server stub routines marshal and unmarshal data and pass a reference to the buffer back to the application.

The following restrictions apply to pipes:

  • A pipe element cannot be or contain a pointer, a conformant or varying array, a handle, or a context handle. Also, in the Microsoft implementation of pipes, a pipe element cannot be or contain a union, a 16b enum, or an __int3264.
  • You cannot apply the [transmit_as], [represent_as], [wire_marshal], or [user_marshal] attributes to a pipe type or to the element-type.
  • A pipe type cannot be a member of a structure or union, the target of a pointer, or the base type of an array.
  • A data type declared to be a pipe type can only be used as a parameter of a remote call.
  • You can pass a pipe parameter in either direction by value or by reference ([ref] pointer). However you cannot apply the [ptr] attribute to a pipe that is passed by reference. You cannot specify a pipe parameter with a [unique] or a full pointer, regardless of direction.
  • You cannot use pipes in [object] interfaces.
  • You cannot apply the [idempotent] attribute to a routine that has a pipe parameter.
  • You cannot use the serialization attributes, [encode] and [decode] with pipes.
  • You cannot use automatic handles, either by default, or with the [auto_handle] attribute, with pipes.
Note  The MIDL compiler supports pipes in /Oif mode only.

For more information on implementing routines with pipe parameters, see Pipes in the RPC Programmer's Guide and Reference.

Examples

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

See also

auto_handle
MIDL Base Types
decode
encode
enum
idempotent
in
object
out
ptr
ref
represent_as
struct
transmit_as
unique
user_marshal
wire_marshal

 

 

Community Additions

ADD
Show:
© 2015 Microsoft