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;
-
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.
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.
typedef pipe unsigned char UCHAR_PIPE1, UCHAR_PIPE2;
//SIMPLE_STRUCT defined elsewhere
typedef pipe SIMPLE_STRUCT SIMPLE_STRUCT_PIPE;