Das wire_marshal-Attribut

Das Attribut [ wire_marshal] ist ein IDL-Attribut, das in der Syntax [ transmit_as] ähnelt, aber eine effizientere Möglichkeit zum Marshallen von Daten in einem Netzwerk bietet.

Sie verwenden das [wire_marshal]-Attribut, um einen Datentyp anzugeben, der anstelle des anwendungsspezifischen Datentyps übertragen wird. Jeder anwendungsspezifische Typ verfügt über einen entsprechenden übertragungsfähigen Typ, der die Drahtdarstellung (die im Netzwerk verwendete Darstellung) definiert. Der anwendungsspezifische Typ muss nicht übertragbar sein, aber er muss ein Typ sein, den MIDL erkennt. Verwenden Sie das ACF-Attribut [ user_marshal], um einen typ zu marshallen, der MIDL unbekannt ist.

Ihr anwendungsspezifischer Typ kann ein einfacher, zusammengesetzter oder Zeigertyp sein. Die Standard Einschränkung besteht darin, dass der Typ instance eine feste, klar definierte Arbeitsspeichergröße aufweisen muss. Wenn sich die Größe Ihres Typs instance ändern muss, verwenden Sie ein Zeigerfeld anstelle eines konformen Arrays. Alternativ können Sie einen Zeiger auf den veränderlichen Typ definieren.

Sie müssen die Routinen für die Größenanpassung, Das Marshallen und Aufheben derMarshaling der Daten sowie das Freigeben des zugeordneten Arbeitsspeichers bereitstellen. In der folgenden Tabelle werden die vier vom Benutzer bereitgestellten Routinenamen beschrieben. Der <Typ> ist der in der [wire_marshal]-Typdefinition angegebene userm-type.

-Routine zurückgegebener Wert BESCHREIBUNG
<type>_UserSize Größen des RPC-Datenpuffers vor dem Marshallen auf der Client- oder Serverseite.
<type>_UserMarshal Marshallt die Daten auf Client- oder Serverseite.
<type>_UserUnmarshal Hebt die Daten auf Client- oder Serverseite auf.
<type>_UserFree Gibt die Daten auf der Serverseite frei.

 

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

Wenn der Parameter nur [ in] ist, überträgt der Client an den Server. Der Client benötigt die <Funktionen typ>_UserSize und <type>_UserMarshal . Der Server benötigt die <Funktionen typ>_UserUnmarshal und <type>_UserFree .

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

Das user_marshal-Attribut

Marshallingregeln für user_marshal und wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo