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.
Kapcsolódó témakörök