Sdílet prostřednictvím


Funkce type_UserMarshal

<typ>_UserMarshal je pomocná funkce atributů [ wire_marshal] a [ user_marshal]. Zástupné procedury volají tuto funkci k zařazování dat na straně klienta nebo serveru. Funkce je definována takto:

unsigned char __RPC_FAR * __RPC_USER  <type>_UserMarshal(
    unsigned long __RPC_FAR * pFlags,
    unsigned char __RPC_FAR * pBuffer,
    <type>  __RPC_FAR *       pMyObj);

Typ <> v názvu funkce znamená typ uživatele zadaný v definici typu typu [wire_marshal] nebo [user_marshal]. Tento typ může být nepřerušitelný nebo i při použití s atributem [user_marshal] – typu neznámého kompilátoru MIDL. Název typu drátu (název povoleného typu) se v prototypu funkce nepoužívá. Všimněte si však, že typ drátu definuje rozložení drátu pro data podle OSF DCE.

Parametr pFlags je ukazatel na nepodepsané pole s dlouhým příznakem. Horní slovo příznaku obsahuje příznaky reprezentace dat 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 popsáno v Type_UserSize Funkce.

Parametr pBuffer je aktuální ukazatel vyrovnávací paměti. Tento ukazatel může nebo nemusí být zarovnaný u položky. Váš <typ>_UserMarshal funkce by měl odpovídajícím způsobem zarovnat ukazatel vyrovnávací paměti, zařaďte data a vraťte novou pozici vyrovnávací paměti, což je adresa prvního bajtu za zařazovaný objekt. Mějte na paměti, že specifikace typu drátu určuje skutečné rozložení dat v vyrovnávací paměti.

Parametr pMyObj je ukazatel na objekt typu uživatele.

Návratová hodnota je nová pozice vyrovnávací paměti, což je adresa prvního bajtu za nešifrovaný objekt.

Přetečení vyrovnávací paměti může nastat, když nesprávně vypočítáte velikost dat a pokusíte se zařaďte více dat, než se čekalo. Měli byste být opatrní, abyste se této situaci vyhnuli. Můžete to zkontrolovat pomocí ukazatele, který <typ>_UserMarshal vrátí. Jinak riskujete, že modul oznámení o nedoručení později vyvolá výjimku přetečení vyrovnávací paměti.

Výjimky musí být zachyceny a zpracovány místně, výjimky nesmí být povoleny k propigování zásobníku volání.

pravidla zařazování user_marshal a wire_marshal

wire_marshal

user_marshal