Declaring Asynchronous Pipes

The following example IDL defines a typical pipe structure, and an asynchronous RPC function with pipes.

Example

//file: Xasyncpipe.idl:
//
interface IMyAsyncPipe 
{
//define the pipe type
typedef pipe int aysnc_intpipe ;
 
//then use it as a parameter
int MyAsyncPipe(handle_t hBinding, 
                [in] a,
                [in] ASYNC_INTPIPE *inpipe, 
                [out] ASYNC_INTPIPE *outpipe, 
                [out] int *b) ;
    };
//other function declarations
} ;
//other interface definitions
//end Xasyncpipe.idl
 
//file:Xasyncpipe.acf:
//file: Xasyncpipe.acf:
interface IMyAsyncPipe
{
[async] MyAsyncPipe () ;
} ;
//
//end Xasyncpipe.acf
 

This is a typical pipe structure definition, containing pointers to push and pull procedures, a buffer to hold the pipe data and a state variable to coordinate the procedures:

//
typedef struct ASYNC_MYPIPE
  {
  RPC_STATUS (__RPC_FAR * pull) (char __RPC_FAR * state,
                                 small __RPC_FAR * buf,
                                 unsigned long esize,
                                 unsigned long __RPC_FAR * ecount );
  RPC_STATUS (__RPC_FAR * push) (char __RPC_FAR * state,
                                 small __RPC_FAR * buf,
                                 unsigned long ecount );
  void *Reserved;
  char __RPC_FAR * state;
  }   ASYNC_INTPIPE;