Der Typ _ der UserMarshal-Funktion

Die < > _ UserMarshal-Funktion vom Typ ist eine Hilfsfunktion für das [ Wire _ Marshal- ] und das User [ _ Marshal-Attribut. ] Die Stubs rufen diese Funktion auf, um Daten auf Client- oder Serverseite zu marshallen. Die Funktion ist 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 den benutzerm-typ, der in der Definition des [ _ ] Marshallingtyps "Wire" oder [ "User _ Marshal" ] angegeben ist. Dieser Typ kann unübersagebar oder sogar , wenn er mit dem [ _ Marshallattribut ] des Benutzers verwendet wird, ein Typ sein, der dem MIDL-Compiler unbekannt ist. Der Name des Kabeltyps (der Name des transprozisierten Typs) wird im Funktionsprototyp nicht verwendet. Beachten Sie jedoch, dass der Wire-Typ das Kabellayout für die Daten definiert, wie von OSF DCE angegeben.

Der pFlags-Parameter ist ein Zeiger auf ein Feld mit einem langen Flag ohne Vorzeichen. 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 Der Typ _ UserSize-Funktionbeschrieben.

Der pBuffer-Parameter ist der aktuelle Pufferzeiger. Dieser Zeiger kann am Eintrag ausgerichtet sein oder nicht. Ihre < > _ UserMarshal-Funktion vom Typ 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 Spezifikation des Kabeltyps 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, die die Adresse des ersten Byte nach dem unmarshaled-Objekt ist.

Ein 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 dies mithilfe des Zeigers überprüfen, der < > _ UserMarshal zurückgibt. Andernfalls besteht die Gefahr, dass die NDR-Engine später eine Pufferüberlaufausnahme auslösen würde.

Ausnahmen müssen lokal abgefangen und behandelt werden, Ausnahmen dürfen nicht in der Aufrufliste weitergegeben werden.

Marshallingregeln für _ Benutzer-Marshalling und Wire _ Marshal

Wire _ Marshal

_Benutzer-Marshalling