Sdílet prostřednictvím


Funkce type_UserSize

<typ>_UserSize funkce je pomocná funkce atributů [wire_marshal] a [ user_marshal]. Zástupné procedury volají tuto funkci, aby velikost vyrovnávací paměti dat RPC pro objekt dat uživatele před zařazením dat na straně klienta nebo serveru. Funkce je definována takto:

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

Typ <> v názvu funkce znamená typ uživatele, jak je uvedeno v definici typu typu [wire_marshal] nebo [user_marshal]. Tento typ může být nepřecházený nebo dokonce – pokud se používá s atributem [user_marshal] neznámým kompilátoru MIDL. Název typu drátu (název typu přenášeného přes síť) se v prototypu funkce nepoužívá. Všimněte si však, že typ drátu definuje rozložení dat určených OSF DCE. Všechna data musí být převedena do formátu NDR (Network Data Representation).

Parametr pFlags je ukazatel na pole příznaku bez znaménka. Horní slovo příznaku obsahuje příznaky formátu oznámení o nedoručení definované OSF DCE pro plovoucí desetinnou čárku, pořadí bajtů a reprezentace znaků. Dolní slovo obsahuje příznak zařazování kontextu definovaný kanálem COM. Přesné rozložení příznaků v poli je znázorněno v následující tabulce.

Bity Vlajka Hodnota
31-24 Reprezentace s plovoucí desetinou čárkou 0 = IEEE 1 = VAX 2 = Cray 3 = IBM
23-20 Celé číslo a pořadí bajtů s plovoucí desetinnou čárkou 0 = Big-endian 1 = Little-endian
19-16 Reprezentace znaků 0 = ASCII 1 = EBCDIC
15-0 Příznak zařazování kontextu 0 = MSHCTX_LOCAL 1 = MSHCTX_NOSHAREDMEM 2 = MSHCTX_DIFFERENTMACHINE 3 = MSHCTX_INPROC

 

Příznak zařazování kontextu umožňuje změnit chování rutiny v závislosti na kontextu volání RPC. Pokud máte například popisovač (dlouhý) do bloku dat, můžete ho odeslat pro volání v procesu, ale skutečná data pro volání do jiného počítače byste odeslali. Příznak zařazování kontextu a jeho hodnoty jsou definovány v souborech Wtypes.h a Wtypes.idl v sadě SDK (Platform Software Development Kit).

Poznámka

Pokud je typ drátu správně definovaný, nemusíte používat příznaky formátu oznámení o nedoručení, protože modul oznámení o nedoručení provádí potřebné převody.

 

StartingSize parametr je aktuální posun vyrovnávací paměti. Počáteční velikost označuje posun vyrovnávací paměti pro objekt uživatele a může nebo nemusí být správně zarovnaný. Vaše rutina by měla počítat s tím, co je potřeba k odsazení.

Parametr pMyObj je ukazatel na objekt typu uživatele.

Návratová hodnota je nová pozice posunu nebo vyrovnávací paměti. Funkce by měla vrátit kumulativní velikost, což je počáteční velikost plus možné odsazení plus velikost dat.

<typ>_UserSize funkce může vrátit přecisování potřebné velikosti. Skutečná velikost odesílané vyrovnávací paměti je definována velikostí dat, nikoli velikostí přidělení vyrovnávací paměti.

Typ <>_UserSize funkce není volána, pokud lze velikost drátu vypočítat v době kompilace. Všimněte si, že u většiny sjednocení, i když neexistují žádné ukazatele, je možné určit skutečnou velikost reprezentace drátu pouze za běhu.

pravidla zařazování pro user_marshal a wire_marshal

user_marshal

wire_marshal