pipe-Attribut

Der Pipetypkonstruktor ermöglicht es, einen offenen Datenstrom mit typisierten Daten über einen Remoteprozeduraufruf zu übertragen.

typedef pipe element-type pipe-declarator;

Parameter

Elementtyp

Definiert die Größe eines einzelnen Elements im Übertragungspuffer. Der Elementtyp kann ein Basistyp, predefined_type, struktur, 32b-Enumeration oder Typbezeichner sein. Für element_types gelten mehrere Einschränkungen, wie in den Anmerkungen unten beschrieben.

Pipe-Deklarator

Gibt mindestens einen Bezeichner oder Zeiger auf Bezeichner an. Trennen Sie mehrere Deklaratoren durch Kommas.

Bemerkungen

Sie können den Pipetypkonstruktor verwenden, um Daten in beide Richtungen zu übertragen. Ein [in] -Pipeparameter ermöglicht dem Server das Pullen des Datenstroms vom Client während eines Remoteprozeduraufrufs. Mit einem [out] -Pipeparameter kann der Server den Datenstrom zurück an den Client pushen. Sie stellen die clientseitigen Routinen zum Pushen und Pullen des Datenstroms und zum Zuweisen eines globalen Puffers für die Daten bereit. Die Client- und Serverstubroutinen marshallen und entmarshalieren Daten und übergeben einen Verweis auf den Puffer zurück an die Anwendung.

Für Rohre gelten die folgenden Einschränkungen:

  • Ein Pipeelement darf kein Zeiger, ein konformes oder variierende Array, ein Handle oder ein Kontexthandle sein oder enthalten. Außerdem darf ein Pipeelement in der Microsoft-Implementierung von Pipes keine Union, eine 16b-Enumeration oder eine __int3264 sein oder enthalten.
  • Sie können die Attribute [transmit_as], [represent_as], [wire_marshal] oder [user_marshal] nicht auf einen Pipetyp oder auf den Elementtyp anwenden.
  • Ein Pipetyp darf kein Mitglied einer Struktur oder Union, das Ziel eines Zeigers oder der Basistyp eines Arrays sein.
  • Ein als Pipetyp deklarierter Datentyp kann nur als Parameter eines Remoteaufrufs verwendet werden.
  • Sie können einen Pipeparameter entweder in Richtung nach Wert oder nach Verweis ([ref] -Zeiger) übergeben. Sie können das Attribut [ptr] jedoch nicht auf eine Pipe anwenden, die als Verweis übergeben wird. Sie können keinen Pipeparameter mit einem [eindeutigen] oder einem vollständigen Zeiger angeben, unabhängig von der Richtung.
  • Sie können keine Pipes in [Objekt] -Schnittstellen verwenden.
  • Sie können das Attribut [idempotent] nicht auf eine Routine anwenden, die über einen Pipeparameter verfügt.
  • Sie können die Serialisierungsattribute [codieren] und [decodieren] nicht mit Pipes verwenden.
  • Sie können keine automatischen Handles verwenden, entweder standardmäßig oder mit dem Attribut [auto_handle] mit Pipes.

Hinweis

Der MIDL-Compiler unterstützt nur Pipes im /Oif-Modus .

 

Weitere Informationen zum Implementieren von Routinen mit Pipeparametern finden Sie unter Pipes im RPC-Programmiererhandbuch und referenz.

Beispiele

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

Weitere Informationen

auto_handle

MIDL-Basistypen

Decodieren

Codieren

Enum

idempotent

In

Objekt

out

Ptr

Ref

represent_as

Struktur

transmit_as

Einzigartige

user_marshal

wire_marshal