Das user_marshal-Attribut

Das Attribut [ user_marshal] ist ein Attribut vom Typ ACF, das in der Syntax mit [ represent_as] vergleichbar ist. Wie beim IDL-Attribut [ wire_marshal] bietet es eine effizientere Möglichkeit, Daten über ein Netzwerk zu marshallen. Als ACF-Attribut können Sie mit [user_marshal] benutzerdefinierte Datentypen marshallen, die MIDL unbekannt sind. Jeder anwendungsspezifische Typ verfügt über einen entsprechenden übertragungsfähigen Typ, der die Drahtdarstellung definiert.

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

Wie beim [wire_marshal] -Attribut stellen Sie Routinen für die Größenanpassung, das Marshallen, Das Entmarshaling und das Freigeben von Durchläufen bereit. In der folgenden Tabelle werden die vier vom Benutzer bereitgestellten Routinenamen beschrieben. Der <Typ> ist der in der [user_marshal] Typdefinition angegebene userm-type.

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

 

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

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

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

Das wire_marshal-Attribut

Marshallregeln für Benutzer marshal und wire_marshal

user_marshal

wire_marshal

NdrGetUserMarshalInfo