Compartilhar via


atributo pipe

O construtor do tipo pipe possibilita transmitir um fluxo aberto de dados tipados em uma chamada de procedimento remoto.

typedef pipe element-type pipe-declarator;

Parâmetros

tipo de elemento

Define o tamanho de um único elemento no buffer de transferência. O tipo de elemento pode ser um tipo base, predefined_type, struct, enumeração de 32b ou identificador de tipo. Várias restrições se aplicam a element_types, conforme descrito em Comentários, abaixo.

pipe-declarator

Especifica um ou mais identificadores ou ponteiros para identificadores. Separe vários declaradores com vírgulas.

Comentários

Você pode usar o construtor do tipo pipe para transmitir dados em ambas as direções. Um parâmetro de pipe [in] permite que o servidor efetue pull do fluxo de dados do cliente durante uma chamada de procedimento remoto. Um parâmetro de pipe [out] permite que o servidor envie o fluxo de dados de volta para o cliente. Você fornece as rotinas do lado do cliente para efetuar push e efetuar pull do fluxo de dados e alocar um buffer global para os dados. As rotinas de stub do cliente e do servidor fazem marshaling e cancelam a gravação de dados e passam uma referência para o buffer de volta para o aplicativo.

As seguintes restrições se aplicam a pipes:

  • Um elemento pipe não pode ser ou conter um ponteiro, uma matriz compatível ou variável, um identificador ou um identificador de contexto. Além disso, na implementação de pipes da Microsoft, um elemento pipe não pode ser ou conter uma união, uma enumeração de 16b ou um __int3264.
  • Não é possível aplicar os atributos [transmit_as], [represent_as], [wire_marshal] ou [user_marshal] a um tipo de pipe ou ao tipo de elemento.
  • Um tipo de pipe não pode ser membro de uma estrutura ou união, o destino de um ponteiro ou o tipo base de uma matriz.
  • Um tipo de dados declarado como um tipo de pipe só pode ser usado como um parâmetro de uma chamada remota.
  • Você pode passar um parâmetro de pipe na direção por valor ou por referência (ponteiro [ref] ). No entanto, você não pode aplicar o atributo [ptr] a um pipe que é passado por referência. Não é possível especificar um parâmetro de pipe com um [exclusivo] ou um ponteiro completo, independentemente da direção.
  • Você não pode usar pipes em interfaces [object] .
  • Não é possível aplicar o atributo [idempotente] a uma rotina que tenha um parâmetro pipe.
  • Você não pode usar os atributos de serialização, [codificar] e [decodificar] com pipes.
  • Você não pode usar identificadores automáticos, por padrão, ou com o atributo [auto_handle] , com pipes.

Observação

O compilador MIDL dá suporte apenas a pipes no modo /Oif .

 

Para obter mais informações sobre como implementar rotinas com parâmetros de pipe, consulte Pipes no Guia e Referência do Programador RPC.

Exemplos

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

Confira também

auto_handle

Tipos base MIDL

Decodificar

Codificar

Enum

idempotente

Em

Objeto

out

Ptr

Ref

represent_as

Struct

transmit_as

Único

user_marshal

wire_marshal