Export (0) Print
Expand All
COM
id
in
int
odl
out
ptr
ref
Expand Minimize
0 out of 1 rated this helpful - Rate this topic

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

 

 

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.