attribut represent_as
Das [represent_as] ACF-Attribut ordnet einen benannten lokalen Typ in der Zielsprache repr-type einem Übertragungstyp namens type zu , der zwischen Client und Server übertragen wird.
typedef [represent_as(repr-type) [[ , type-attribute-list ]] ] named-type;
void __RPC_USER named-type_from_local (
repr-type __RPC_FAR * ,
named-type __RPC_FAR * __RPC_FAR * );
void __RPC_USER named-type_to_local (
named-type __RPC_FAR * ,
repr-type __RPC_FAR * ); void __RPC_USER named-type _free_inst ( named-type __RPC_FAR * ); void __RPC_USER named-type _free_local ( repr-type __RPC_FAR * );
Parameter
-
named-type
-
Gibt den benannten Übertragungsdatentyp an, der zwischen Client und Server übertragen wird.
-
type-attribute-list
-
Gibt mindestens ein Attribut an, das für den Typ gilt. Trennen Sie mehrere Attribute durch Kommas.
-
repr-type
-
Gibt den dargestellten lokalen Typ in der Zielsprache an, die den Client- und Serveranwendungen angezeigt wird.
Bemerkungen
Wenn Sie [represent_as] verwenden, müssen Sie Routinen bereitstellen, die zwischen den lokalen und den Übertragungstypen und dem freien Arbeitsspeicher konvertieren, der zum Speichern der konvertierten Daten verwendet wird. Das Attribut [represent_as] weist die Stubs an, die vom Benutzer bereitgestellten Konvertierungsroutinen aufzurufen.
Der übertragene Typ namens type muss in einen MIDL-Basistyp, einen vordefinierten Typ oder in einen Typbezeichner aufgelöst werden. Weitere Informationen finden Sie unter MIDL-Basistypen.
Sie müssen die folgenden Routinen bereitstellen:
Routinename | BESCHREIBUNG |
---|---|
named_type**_from_local** | Konvertiert Daten vom lokalen Typ in den Netzwerktyp. Die Routine weist Arbeitsspeicher für den Netzwerkdatentyp zu, einschließlich Arbeitsspeicher für alle Daten, auf die durch Zeiger im Netzwerkdatentyp verwiesen wird. |
named_type**_to_local** | Konvertiert Daten vom Netzwerktyp in den lokalen Typ. Die Routine ist für die Zuweisung von Arbeitsspeicher für Daten verantwortlich, auf die von Zeigern im lokalen Typ verwiesen wird. RPC weist arbeitsspeicher für den lokalen Typ selbst zu. |
named_type**_free_local** | Gibt Arbeitsspeicher frei, der für Daten zugewiesen ist, auf die durch Zeiger im lokalen Typ verwiesen wird. RPC gibt Arbeitsspeicher für den Typ selbst frei. |
named_type**_free_inst** | Gibt Arbeitsspeicher frei, der für die Daten, auf die durch Zeiger im Netzwerktyp verwiesen wird, und für den Netzwerktyp selbst zugewiesen ist. |
Der Client-Stub ruft named-type**_from_local** auf, um Speicherplatz für den übertragenen Typ zuzuweisen und die Daten vom lokalen Typ in den Netzwerktyp zu übersetzen. Der Serverstub weist Speicherplatz für den ursprünglichen Datentyp zu und ruft named-type**_to_local** auf, um die Daten vom Netzwerktyp in den lokalen Typ zu übersetzen.
Nach der Rückgabe vom Anwendungscode rufen die Client- und Server-Stubs named-type**_free_inst** auf, um die Zuordnung des Speichers für den Netzwerktyp zu beheben. Der Clientstub ruft named-type**_free_local** auf, um den von der Routine zurückgegebenen Speicher zu behandeln.
Die folgenden Typen können nicht über ein [represent_as]-Attribut verfügen :
- Konforme, variierende oder konform variierende Arrays
- Strukturen, in denen das letzte Element ein konformes Array ist (eine konforme Struktur)
- Zeiger oder Typen, die einen Zeiger enthalten
- Rohre oder Typen, die Rohre enthalten
- Typen, die als Basistyp für eine Pipe verwendet werden
- Vordefinierte Typen handle_t, void
- Typen mit dem Attribut [handle]
Beispiele
//these data types defined in .IDL or elsewhere
typedef struct _lbox
{
long data;
struct _lbox *next;
} lbox;
typedef [ref] lbox *PBOX_LOC;
typedef long LONG4[4];
//in .ACF file :
interface iface
{
typedef [ represent_as(PBOX_LOC) ] LONG4;
}
Weitere Informationen