Die type_UserUnmarshal-Funktion

Die <Type>_UserUnmarshal 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 aufzuheben. Die Funktion ist definiert wie folgt:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserUnmarshal(
    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 ist möglicherweise nicht übersetzbar oder sogar – wenn er mit dem [user_marshal] -Attribut verwendet wird – dem MIDL-Compiler unbekannt. 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>_UserUnmarshal-Funktion sollte den Pufferzeiger entsprechend ausrichten, die Daten aufheben und die neue Pufferposition zurückgeben, die die Adresse des ersten Byte nach dem nichtmarshalierten Objekt ist.

Der Parameter pMyObj ist ein Zeiger auf ein benutzerdefiniertes Typobjekt.

In einer heterogenen Umgebung führt die NDR-Engine jede Datenkonvertierung durch, die vor dem Aufrufen der <Typ>_UserUnmarshal funktion erforderlich ist. Beachten Sie, dass die NDR-Engine diese Datenkonvertierung gemäß der für diesen Benutzerdatentyp angegebenen Drahttypdefinition durchführt. Das Flag gibt die Datendarstellung des Absenders an.

Marshallingregeln für user_marshal und wire_marshal

wire_marshal

user_marshal