Freigeben über


Die type_UserMarshal-Funktion

Die <type>_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 Serverseite zu marshallen. Die Funktion ist definiert wie folgt:

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 bezeichnet den in der [wire_marshal] oder [user_marshal] -Typdefinition angegebenen userm-type. Dieser Typ kann nicht übersetzt werden oder sogar – wenn er mit dem [user_marshal] -Attribut verwendet wird – ein Typ, der dem MIDL-Compiler unbekannt ist. Der Name des Drahttyps (der Name des übertragbaren Typs) wird im Funktionsprototyp nicht verwendet. Beachten Sie jedoch, dass der Drahttyp das Drahtlayout für die Daten definiert, wie von OSF DCE angegeben.

Der pFlags-Parameter ist ein Zeiger auf ein Feld ohne vorsigniertes langes Flag. Das obere Wort des Flags enthält NDR-Datendarstellungsflags, wie von OSF DCE für Gleitkomma-, Bytereihenfolge- und Zeichendarstellungen definiert. Das untere Wort enthält ein Marshallingkontextflag, wie vom COM-Kanal definiert. Das genaue Layout der Flags innerhalb des Felds wird unter Die type_UserSize-Funktion beschrieben.

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

Der Parameter pMyObj ist ein Zeiger auf ein Benutzertypobjekt.

Der Rückgabewert ist die neue Pufferposition, die die Adresse des ersten Bytes nach dem nichtmarshalierten Objekt darstellt.

Pufferüberlauf kann auftreten, wenn Sie die Größe der Daten falsch berechnen und versuchen, mehr Daten als erwartet zu marshallen. Sie sollten darauf achten, diese Situation zu vermeiden. Sie können ihn überprüfen, indem Sie den Zeiger verwenden, den der <Typ> zurückgibt_UserMarshal . Andernfalls besteht das Risiko, dass die NDR-Engine später eine Pufferüberlaufausnahme auslöst.

Ausnahmen müssen lokal abgefangen und behandelt werden, Ausnahmen dürfen die Aufrufliste nicht propigieren.

Marshallingregeln für user_marshal und wire_marshal

wire_marshal

user_marshal