Megosztás a következőn keresztül:


A type_UserSize függvény

A <típus>_UserSize függvény a [ wire_marshal] és a [ user_marshal] attribútumok segédfüggvénye. A csonkok úgy hívják ezt a függvényt, hogy méretezze a felhasználói adatobjektum RPC-adatpufferét, mielőtt az adatok az ügyfél vagy a kiszolgáló oldalára kerülnek. A függvény a következőképpen van definiálva:

unsigned long __RPC_USER  <type>_UserSize(
    unsigned long __RPC_FAR * pFlags,
    unsigned long StartingSize,
    <type>  __RPC_FAR *pMyObj);

A függvénynévben szereplő <típus> a [wire_marshal] vagy [user_marshal] típusdefinícióban megadott felhasználótípust jelenti. Ez a típus a MIDL-fordító számára ismeretlen [user_marshal] attribútummal együtt nem adható át, vagy páros is lehet. A vezetéktípus neve (a hálózaton keresztül továbbított típus neve) nem használatos a függvény prototípusában. Vegye figyelembe azonban, hogy a vezeték típusa határozza meg az adatok elrendezését az OSF DCE által meghatározottak szerint. Minden adatot hálózati adatábrázolás (NDR) formátumba kell konvertálni.

A pFlags paraméter egy alá nem írt hosszú jelzőmezőre mutató mutató. A jelölő felső szava az OSF DCE által meghatározott NDR formátumú jelzőket tartalmazza lebegőpontos, bájtsorrendi és karakterábrázolásokhoz. Az alsó szó egy, a COM-csatorna által definiált környezetjelzőt tartalmaz. A mezőn belüli jelölők pontos elrendezése az alábbi táblázatban látható.

Bit Zászló Érték
31-24 Lebegőpontos ábrázolás 0 = IEEE 1 = VAX 2 = Cray 3 = IBM
23-20 Egész szám és lebegőpontos bájtsorrend 0 = Big-endian 1 = Little-endian
19-16 Karakterábrázolás 0 = ASCII 1 = EBCDIC
15-0 A marshaling környezeti jelzője 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC

 

A marshaling context flag lehetővé teszi a rutin viselkedésének módosítását az RPC-hívás környezetétől függően. Ha például egy leíróval (hosszú) rendelkezik egy adatblokkhoz, elküldheti a leírót egy folyamatban lévő híváshoz, de a hívás tényleges adatait egy másik gépre küldené. A marshaling context flag és annak értékei a Wtypes.h és a Wtypes.idl fájlokban vannak definiálva a Platform Software Development Kitben (SDK).

Jegyzet

Ha a vezeték típusa megfelelően van definiálva, nem kell az NDR formátumjelzőit használnia, mivel az NDR motor elvégzi a szükséges átalakításokat.

 

A StartingSize paraméter az aktuális puffereltolás. A kezdő méret a felhasználói objektum puffereltolását jelzi, és lehet, hogy nem megfelelően van igazítva. A rutinnak figyelembe kell vennie, hogy milyen padding szükséges.

A pMyObj paraméter egy felhasználói típusú objektumra mutató mutató.

A visszatérési érték az új eltolás vagy pufferpozíció. A függvénynek a kumulatív méretet kell visszaadnia, amely a kezdőméret és a lehetséges kitöltés plusz az adatméret.

A <típusú>_UserSize függvény a szükséges méret túlbecsüléséhez vezethet. Az elküldött puffer tényleges méretét az adatméret határozza meg, nem pedig a pufferfoglalás mérete.

A <típusú>_UserSize függvény nem hívható meg, ha a huzal mérete fordításkor számítható ki. Vegye figyelembe, hogy a legtöbb egyesítő esetében, még akkor is, ha nincsenek mutatók, a vezetékek ábrázolásának tényleges mérete csak futásidőben határozható meg.

user_marshal és wire_marshal

user_marshal

wire_marshal