transmit_as-Attribut
Das [transmit_as] -Attribut weist den Compiler an, typ-id** zuzuordnen. Dabei handelt es sich um einen präsentierten Typ, den Client- und Serveranwendungen bearbeiten, mit einem übertragenen Typ xmit-type.
typedef [transmit_as(xmit-type) [[ , type-attribute-list ]] ] type-specifier declarator-list;
void __RPC_USER type-id_to_xmit (
type-id __RPC_FAR *,
xmit-type __RPC_FAR * __RPC_FAR *);
void __RPC_USER type-id_from_xmit (
xmit-type __RPC_FAR *,
type-id __RPC_FAR *);
void __RPC_USER type-id_free_inst (
type-id __RPC_FAR *);
void __RPC_USER type-id_free_xmit (
xmit-type__RPC_FAR *);
Parameter
-
xmit-type
-
Gibt den Datentyp an, der zwischen Client und Server übertragen wird.
-
type-attribute-list
-
Gibt ein oder mehrere Attribute an, die für den Typ gelten. Gültige Typattribute sind [handle], [switch_type]; das Zeiger-Attribut [ref], [eindeutig], oder [ptr]; und die Verwendungsattribute [Zeichenfolge] und [ignorieren]. Trennen Sie mehrere Attribute durch Kommas.
-
Typspezifizierer
-
Gibt einen Basistyp, eine Struktur, eine Union, einen Enumerationstyp oder einen Typbezeichner an. Eine optionale Speicherspezifikation kann dem Typbezeichner vorangestellt werden.
-
declarator-list
-
Gibt Standard-C-Deklaratoren an, z. B. Bezeichner, Zeiger-Deklaratoren und Array-Deklaratoren. Weitere Informationen finden Sie unter Array- und Sized-Pointer Attribute, Arrays und Arrays und Zeiger. Die Deklaratorliste besteht aus einem oder mehreren Deklaratoren, die durch Kommas getrennt sind. Der Parameterdeklarationsator im Funktionsdeklarationsator, z. B. der Parametername, ist optional.
-
type-id
-
Gibt den Namen des Datentyps an, der den Client- und Serveranwendungen angezeigt wird.
Bemerkungen
Um das [transmit_as]- Attribut zu verwenden, muss der Benutzer Routinen bereitstellen, die Daten zwischen den präsentierten und den übertragenen Typen konvertieren. Diese Routinen müssen auch Arbeitsspeicher freigeben, der zum Speichern der konvertierten Daten verwendet wird. Das [transmit_as] -Attribut weist die Stubs an, die vom Benutzer bereitgestellten Konvertierungsroutinen aufzurufen.
Der übertragene Typ xmit-type muss in einen MIDL-Basistyp, einen vordefinierten Typ oder einen Typbezeichner aufgelöst werden. Weitere Informationen finden Sie unter MIDL-Basistypen.
Der Benutzer muss die folgenden Routinen angeben.
Routinename | BESCHREIBUNG |
---|---|
type-id**_to_xmit** | Konvertiert Daten aus dem dargestellten Typ in den übertragenen Typ. Diese Routine ordnet Arbeitsspeicher für den übertragenen Typ und für alle Daten zu, auf die durch Zeiger im übertragenen Typ verwiesen wird. |
type-id**_from_xmit** | Konvertiert Daten vom übertragenen Typ in den dargestellten Typ. Diese Routine ist für die Zuweisung von Arbeitsspeicher für Daten verantwortlich, auf die durch Zeiger im dargestellten Typ verwiesen wird. RPC weist Arbeitsspeicher für den Typ selbst zu. |
type-id**_free_inst** | Gibt Arbeitsspeicher frei, der für Daten zugeordnet ist, auf die durch Zeiger im dargestellten Typ verwiesen wird. RPC gibt Arbeitsspeicher für den Typ selbst frei. |
type-id**_free_xmit** | Gibt speicherfrei, der vom Aufrufer für den übertragenen Typ und für Daten verwendet wird, auf die durch Zeiger im übertragenen Typ verwiesen wird. |
Der Clientstub ruft type-id**_to_xmit** auf, um Speicherplatz für den übertragenen Typ zuzuweisen und die Daten in Objekte des Typs xmit-type zu übersetzen. Der Serverstub belegt Speicherplatz für den ursprünglichen Datentyp und ruft type-id**_from_xmit** auf, um die Daten aus dem übertragenen Typ in den dargestellten Typ zu übersetzen.
Nach der Rückgabe vom Anwendungscode ruft der Serverstub type-id**_free_inst** auf, um die Zuordnung des Speichers für type-id auf serverseitiger Seite aufzugeben. Der Clientstub ruft type-id**_free_xmit** auf, um die Zuordnung des xmit-Typspeichers auf Clientseite aufzugeben.
Die folgenden Typen können nicht über ein [transmit_as]-Attribut verfügen :
- Kontexthandles (Typen mit dem [context_handle] -Typattribute und Typen, die als Parameter mit dem [context_handle]- Attribut verwendet werden)
- Typen, die Pipes sind oder von Rohren abgeleitet sind
- Datentypen, die als Basistyp einer Pipedefinition verwendet werden
- Parameter, die Zeiger sind oder in Zeiger aufgelöst werden
- Parameter, die konformen, variierenden oder offenen Arrays sind
- Strukturen, die konforme Arrays enthalten
- Der vordefinierte Typ handle_tvoid
Typen, die übertragen werden, müssen den folgenden Einschränkungen entsprechen:
- Sie dürfen keine Zeiger sein oder Zeiger enthalten.
- Sie dürfen keine Rohre sein oder Rohre enthalten.
Beispiele
typedef struct _TREE_NODE_TYPE
{
unsigned short data;
struct _TREE_NODE_TYPE * left;
struct _TREE_NODE_TYPE * right;
} TREE_NODE_TYPE;
typedef [transmit_as(TREE_XMIT_TYPE)] TREE_NODE_TYPE * TREE_TYPE;
void __RPC_USER TREE_TYPE_to_xmit(
TREE_TYPE __RPC_FAR * ,
TREE_XMIT_TYPE __RPC_FAR * __RPC_FAR *);
void __RPC_USER TREE_TYPE_from_xmit (
TREE_XMIT_TYPE __RPC_FAR *,
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_inst(
TREE_TYPE __RPC_FAR *);
void __RPC_USER TREE_TYPE_free_xmit(
TREE_XMIT_TYPE __RPC_FAR *);
Weitere Informationen