Freigeben über


Die type_UserMarshal-Funktion

Der <Typ>_UserMarshal Funktion ist eine Hilfsfunktion für die Attribute [ wire_marshal] und [ user_marshal] . Die Stubs rufen diese Funktion auf, um Daten auf client- oder serverseitiger Seite zu marshallen. Die Funktion wird wie folgt definiert:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserMarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

Der <Typ> im Funktionsnamen bedeutet, dass der im [wire_marshal] oder [user_marshal] Typdefinition angegebene Benutzertyp angegeben ist. Dieser Typ ist möglicherweise nicht übersetzbar oder sogar – wenn er mit dem [user_marshal] Attribut verwendet wird – ein Typ, der dem MIDL-Compiler unbekannt ist. Der Drahttypname (der Name des transmissiblen Typs) wird im Funktionsprototyp nicht verwendet. Beachten Sie jedoch, dass der Drahttyp das Drahtlayout für die Daten definiert, wie durch OSF DCE angegeben.

Der pFlags Parameter ist ein Zeiger auf ein nicht signiertes langes Flag-Feld. Das obere Wort des Flags enthält NDR-Datendarstellungskennzeichnungen gemäß der Definition von OSF DCE für Gleitkomma-, Bytereihenfolge- und Zeichendarstellungen. Das untere Wort enthält ein Marshaling-Kontextflagge gemäß der Definition durch den COM-Kanal. Das genaue Layout der Flags innerhalb des Felds wird in Die type_UserSize Functionbeschrieben.

Der pBuffer Parameter ist der aktuelle Pufferzeiger. Dieser Zeiger kann am Eintrag ausgerichtet oder nicht ausgerichtet werden. Der <Typ>_UserMarshal Funktion sollte den Pufferzeiger entsprechend ausrichten, die Daten marshallen und die neue Pufferposition zurückgeben. Dies ist die Adresse des ersten Bytes nach dem gemarstischen Objekt. Beachten Sie, dass die Drahttypspezifikation das tatsächliche Layout der Daten im Puffer bestimmt.

Der pMyObj Parameter ist ein Zeiger auf ein Benutzertypobjekt.

Der Rückgabewert ist die neue Pufferposition, bei der es sich um die Adresse des ersten Bytes nach dem nichtmarshalierten Objekt handelt.

Pufferüberlauf kann auftreten, wenn Sie die Größe der Daten falsch berechnen und versuchen, mehr Daten zu marshallen als erwartet. Sie sollten darauf achten, diese Situation zu vermeiden. Sie können dies mithilfe des Zeigers überprüfen, der <Typ>_UserMarshal zurückgegeben wird. Andernfalls besteht das Risiko, dass das NDR-Modul später eine Pufferüberlaufausnahme auslöst.

Ausnahmen müssen lokal abgefangen und behandelt werden, Ausnahmen dürfen den Aufrufstapel nicht propigieren.

Marshaling-Regeln für user_marshal und wire_marshal

wire_marshal

user_marshal