Die type_UserSize-Funktion
Der <Typ>_UserSize Funktion ist eine Hilfsfunktion für die Attribute [ wire_marshal] und [ user_marshal] . Die Stubs rufen diese Funktion auf, um den RPC-Datenpuffer für das Benutzerdatenobjekt zu vergrößern, bevor die Daten auf client- oder serverseitiger Seite gemarstet werden. Die Funktion wird wie folgt definiert:
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
Der <Typ> im Funktionsnamen bedeutet den Benutzertyp, wie in der [wire_marshal] oder [user_marshal] Typdefinition angegeben. Dieser Typ ist möglicherweise nicht übersetzbar oder sogar – wenn er mit dem [user_marshal] Attribut verwendet wird – unbekannt für den MIDL-Compiler. Der Drahttypname (der Name des über das Netzwerk übertragenen Typs) wird nicht im Funktionsprototyp verwendet. Beachten Sie jedoch, dass der Drahttyp das Layout für die Daten definiert, wie von OSF DCE angegeben. Alle Daten müssen in das NDR-Format (Network Data Representation) konvertiert werden.
Der pFlags--Parameter ist ein Zeiger auf ein nicht signiertes langes Flagfeld. Das obere Wort des Flags enthält NDR-Formatkennzeichnungen 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 der folgenden Tabelle angezeigt.
Bits | Flagge | Wert |
---|---|---|
31-24 | Gleitkommadarstellung | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
23-20 | Ganzzahlige Und gleitkommazahlige Bytereihenfolge | 0 = Big-Endian 1 = Little-Endian |
19-16 | Zeichendarstellung | 0 = ASCII 1 = EBCDIC |
15-0 | Marshaling-Kontextkennzeichnung | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
Das Marshaling-Kontextkennzeichnung ermöglicht es, das Verhalten Ihrer Routine abhängig vom Kontext für den RPC-Aufruf zu ändern. Wenn Sie z. B. über ein Handle (lange) an einen Datenblock verfügen, können Sie das Handle für einen Prozessaufruf senden, aber Sie würden die tatsächlichen Daten für einen Anruf an einen anderen Computer senden. Die Marshaling-Kontextkennzeichnung und deren Werte werden in den Dateien Wtypes.h und Wtypes.idl im Platform Software Development Kit (SDK) definiert.
Anmerkung
Wenn der Drahttyp ordnungsgemäß definiert ist, müssen Sie die NDR-Formatkennzeichnungen nicht verwenden, da das NDR-Modul die erforderlichen Konvertierungen ausführt.
Die StartingSize einem Parameter ist der aktuelle Pufferoffset. Die Startgröße gibt den Pufferoffset für das Benutzerobjekt an, und er wird möglicherweise ordnungsgemäß ausgerichtet oder nicht ordnungsgemäß ausgerichtet. Ihre Routine sollte den erforderlichen Abstand berücksichtigen.
Der pMyObj Parameter ist ein Zeiger auf ein Benutzertypobjekt.
Der Rückgabewert ist die neue Offset- oder Pufferposition. Die Funktion sollte die kumulierte Größe zurückgeben, bei der es sich um die Startgröße plus möglicher Abstände sowie um die Datengröße handelt.
Der <Typ>_UserSize Funktion kann eine Überschätzung der benötigten Größe zurückgeben. Die tatsächliche Größe des gesendeten Puffers wird durch die Datengröße definiert, nicht durch die Pufferzuordnungsgröße.
Der <Typ>_UserSize Funktion wird nicht aufgerufen, wenn die Drahtgröße zur Kompilierungszeit berechnet werden kann. Beachten Sie, dass bei den meisten Gewerkschaften, auch wenn keine Zeiger vorhanden sind, die tatsächliche Größe der Drahtdarstellung nur zur Laufzeit bestimmt werden kann.
Verwandte Themen