Das attribut user_marshal
Das Attribut [ user_marshal] ist ein ACF-Typ-Attribut ähnlich in der Syntax wie [ represent_as]. Wie beim IDL-Attribut bietet [ wire_marshal], es bietet eine effizientere Möglichkeit, Daten über ein Netzwerk hinweg zu marshallen. Als ACF-Attribut können Sie mit [user_marshal] benutzerdefinierte Datentypen marshallen, die für 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 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.
Wie bei der [wire_marshal] Attribut geben Sie Routinen für die Größenanpassung, das Marshalling, das Entmarshaling und die Freihanddurchläufe an. In der folgenden Tabelle werden die vier vom Benutzer bereitgestellten Routinenamen beschrieben. Der <Typ> ist der in der [user_marshal] Typdefinition angegebeneTyp typ.
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 Benutzer bereitgestellten Routinen werden entweder vom Client oder der Serveranwendung basierend auf den direktionalen Attributen 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>_UserUnmarshal und <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.
Verwandte Themen