Atribut wire_marshal
Atribut [ wire_marshal] je atribut typu IDL podobný syntaxi jako [ transmit_as], ale poskytuje efektivnější způsob, jak zařazovat data v síti.
Pomocí atributu [wire_marshal] můžete určit datový typ, který se bude přenášet místo datového typu specifického pro aplikaci. Každý typ specifický pro aplikaci má odpovídající přenositelný typ, který definuje reprezentaci drátu (reprezentace použitá v síti). Typ specifický pro aplikaci nemusí být přenášený, ale musí to být typ, který MIDL rozpozná. Chcete-li zařazovat typ neznámý do MIDL, použijte atribut ACF [ user_marshal].
Typ specifický pro vaši aplikaci může být jednoduchý, složený nebo ukazatel. Hlavním omezením je, že instance typu musí mít pevnou, dobře definovanou velikost paměti. Pokud je potřeba změnit velikost instance typu, použijte místo odpovídajícího pole pole ukazatel. Případně můžete definovat ukazatel na změnitelný typ.
Je nutné zadat rutiny pro určení velikosti, zařazování a zrušení vymezení dat a také uvolnění přidružené paměti. Následující tabulka popisuje čtyři uživatelsky zadané názvy rutin. Typ <> je typ uživatele zadaný v definici typu [wire_marshal].
Rutina | Popis |
---|---|
<typ>_UserSize | Velikost vyrovnávací paměti dat RPC před zařazením na straně klienta nebo serveru. |
typ <>_UserMarshal | Zařadí data na straně klienta nebo serveru. |
typ <>_UserUnmarshal | Rozbalí data na straně klienta nebo serveru. |
typ <>_UserFree | Uvolní data na straně serveru. |
Tyto rutiny poskytované programátorem poskytuje klient nebo serverová aplikace na základě směrových atributů.
Pokud je parametr pouze [ v], klient se odešle na server. Klient potřebuje <typ>_UserSize a <>_UserMarshal funkce. Server potřebuje <typ>_UserUnmarshala <typ>_UserFree funkce.
Pro parametr [out]-only server přenese do klienta. Server potřebuje <typ>_UserSize a <>_UserMarshal funkce, zatímco klient potřebuje <typ>_UserMarshal funkce.
Související témata