Udostępnij przez


Atrybut user_marshal

Atrybut [ user_marshal] jest atrybutem typu ACF podobnym do składni [represent_as]. Podobnie jak w przypadku atrybutu IDL [ wire_marshal], oferuje bardziej wydajny sposób marshalingu danych w sieci. Jako atrybut ACF [user_marshal] umożliwia przeprowadzanie marshalingu niestandardowych typów danych nieznanych midL. Każdy typ specyficzny dla aplikacji ma odpowiedni typ przekazywany, który definiuje reprezentację przewodu.

Typ specyficzny dla aplikacji może być prosty, złożony lub wskaźnik. Głównym ograniczeniem jest to, że wystąpienie typu musi mieć stały, dobrze zdefiniowany rozmiar pamięci. Jeśli rozmiar wystąpienia typu musi ulec zmianie, użyj pola wskaźnika, a nie zgodnej tablicy. Alternatywnie można zdefiniować wskaźnik do typu możliwego do zmiany.

Podobnie jak w przypadku atrybutu [wire_marshal], należy podać procedury ustalania rozmiaru, marshalingu, unmarshaling i zwalniania przechodzi. W poniższej tabeli opisano cztery nazwy procedur dostarczonych przez użytkownika. Typ <> to typ userm- określony w definicji typu [user_marshal].

Rutyna Opis
<typ>_UserSize Rozmiary buforu danych RPC przed przeprowadzaniem marshalingu po stronie klienta lub serwera.
<typ>_UserMarshal Marshaluje dane po stronie klienta lub serwera.
<typ>_UserUnmarshal Odłącza dane po stronie klienta lub serwera.
<typ>_UserFree Zwalnia dane po stronie serwera.

 

Te procedury dostarczane przez użytkownika są dostarczane przez klienta lub aplikację serwera na podstawie atrybutów kierunkowych.

Jeśli parametr ma wartość [ tylko w], klient przesyła do serwera. Klient potrzebuje funkcji <typu>_UserSize i <typu>_UserMarshal. Serwer wymaga>_UserUnmarshal typu<i funkcji <typu>_UserFree.

W przypadku parametru []-only serwer przesyła do klienta. Serwer potrzebuje funkcji>_UserSize typu<i <typu>_UserMarshal, podczas gdy klient potrzebuje funkcji>_UserMarshal typu<.

atrybutu wire_marshal

Reguły marshalingu dla marshalingu użytkowników i wire_marshal

user_marshal

wire_marshal

NdrGetUserMarshalInfo