Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Funktionen <typ>_UserSize är en hjälpfunktion för attributen [ wire_marshal] och [ user_marshal] . Stubs anropar den här funktionen för att ändra storleken på RPC-databufferten för användardataobjektet innan data konverteras på klient- eller serversidan. Funktionen definieras som:
unsigned long __RPC_USER <type>_UserSize(
unsigned long __RPC_FAR * pFlags,
unsigned long StartingSize,
<type> __RPC_FAR *pMyObj);
Den <typen> i funktionsnamnet innebär användartypen, enligt beskrivningen i [wire_marshal] eller [user_marshal] typdefinition. Den här typen kan vara oöversatt eller till och med – när den används med attributet [user_marshal] – okänd för MIDL-kompilatorn. Namnet på trådtypen (namnet på den typ som överförs över nätverket) används inte i funktionsprototypen. Observera dock att trådtypen definierar layouten för data enligt OSF DCE. Alla data måste konverteras till NDR-format (Network Data Representation).
Parametern pFlags är en pekare till ett osignerat långt flaggfält. Det övre ordet i flaggan innehåller NDR-formatflaggor som definierats av OSF DCE för flyttal, byteordning och teckenrepresentationer. Det nedre ordet innehåller en kontextflagga som definieras av COM-kanalen. Den exakta layouten för flaggorna i fältet visas i följande tabell.
| Bitar | Flagga | Värde |
|---|---|---|
| 31-24 | Flyttalsrepresentation | 0 = IEEE 1 = VAX 2 = Cray 3 = IBM |
| 23-20 | Heltals- och flyttalsbyteordning | 0 = Big-endian 1 = Little-endian |
| 19-16 | Teckenrepresentation | 0 = ASCII 1 = EBCDIC |
| 15-0 | Kontextflagga för marskalkering | 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC |
Kontextflaggan för marskalkering gör det möjligt att ändra beteendet för din rutin beroende på kontexten för RPC-anropet. Om du till exempel har ett handtag (lång) till ett datablock kan du skicka handtaget för ett pågående anrop, men du skickar faktiska data för ett anrop till en annan dator. Kontextflaggan för marskalkering och dess värden definieras i filerna Wtypes.h och Wtypes.idl i Platform Software Development Kit (SDK).
Not
När trådtypen är korrekt definierad behöver du inte använda flaggorna i NDR-format eftersom NDR-motorn utför nödvändiga konverteringar.
StartingSize en parameter är den aktuella buffertförskjutningen. Startstorleken anger buffertförskjutningen för användarobjektet, och den kanske inte är korrekt justerad. Din rutin bör ta hänsyn till vad utfyllnad är nödvändigt.
Parametern pMyObj är en pekare till ett objekt av användartyp.
Returvärdet är den nya förskjutningen eller buffertpositionen. Funktionen ska returnera den kumulativa storleken, som är startstorleken plus möjlig utfyllnad plus datastorleken.
Funktionen <typ>_UserSize kan returnera en överskattning av den storlek som behövs. Den faktiska storleken på den skickade bufferten definieras av datastorleken, inte av buffertallokeringsstorleken.
Funktionen <typ>_UserSize anropas inte om trådstorleken kan beräknas vid kompileringstillfället. Observera att för de flesta fackföreningar, även om det inte finns några pekare, kan den faktiska storleken på trådrepresentationen endast fastställas vid körning.
Relaterade ämnen