Freigeben über


Das attribut wire_marshal

Das Attribut [ wire_marshal] ist ein IDL-Typ-Attribut ähnlich in der Syntax wie [ transmit_as], bietet jedoch eine effizientere Möglichkeit, Daten über ein Netzwerk hinweg zu marshallen.

Sie verwenden das Attribut [wire_marshal] zum Angeben eines Datentyps, der anstelle des anwendungsspezifischen Datentyps übertragen wird. Jeder anwendungsspezifische Typ verfügt über einen entsprechenden übertragungsfähigen Typ, der die Drahtdarstellung definiert (die im Netzwerk verwendete Darstellung). Der anwendungsspezifische Typ muss nicht übertragen werden, muss aber ein Typ sein, den MIDL erkennt. Verwenden Sie das ACF-Attribut [ user_marshal].

Ihr anwendungsspezifischer Typ kann ein einfacher, zusammengesetzter oder Zeigertyp sein. Die Haupteinschränkung besteht darin, dass die Typinstanz über eine feste, klar definierte Speichergröße verfügen muss. Wenn sich die Größe der Typinstanz ändern muss, verwenden Sie ein Zeigerfeld anstelle eines konformen Arrays. Alternativ können Sie einen Zeiger auf den veränderbaren Typ definieren.

Sie müssen die Routinen zum Skalieren, Marshallen und Aufheben der Entmargung der Daten sowie zum Freigeben des zugeordneten Speichers bereitstellen. In der folgenden Tabelle werden die vier vom Benutzer bereitgestellten Routinenamen beschrieben. Der <Typ> ist der in der [wire_marshal] Typdefinition angegebene Benutzertyp.

Routine Beschreibung
<Typ>_UserSize Passt die Größe des RPC-Datenpuffers vor dem Marshalling auf client- oder serverseitiger Seite an.
<Typ>_UserMarshal Marshallt die Daten auf client- oder serverseitiger Seite.
<Typ>_UserUnmarshal Entmarsen Sie die Daten auf client- oder serverseitiger Seite.
<Typ>_UserFree Gibt die Daten auf serverseitiger Seite frei.

 

Diese vom Programmierer bereitgestellten Routinen werden entweder vom Client oder von der Serveranwendung basierend auf den Richtungsattributen bereitgestellt.

Wenn der Parameter in ] nur [] ist, wird der Client an den Server übertragen. Der Client benötigt den <Typ>_UserSize und <Typ>_UserMarshal Funktionen. Der Server benötigt den <Typ>_UserUnmarshalund <Typ>_UserFree Funktionen.

Bei einem [ ]-only-Parameter überträgt der Server an den Client. Der Server benötigt den <Typ>_UserSize und <Typ>_UserMarshal Funktionen, während der Client den <Typ>_UserMarshal Funktion benötigt.

Das user_marshal-Attribut

Marshaling-Regeln für user_marshal und wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo