Udostępnij przez


Atrybut wire_marshal

Atrybut [ wire_marshal] jest atrybutem typu IDL podobnym do składni [transmit_as], ale zapewnia bardziej wydajny sposób marshalingu danych w sieci.

Atrybut [wire_marshal] służy do określania typu danych, który będzie przesyłany zamiast typu danych specyficznych dla aplikacji. Każdy typ specyficzny dla aplikacji ma odpowiedni typ przekazywany, który definiuje reprezentację przewodu (reprezentację używaną w sieci). Typ specyficzny dla aplikacji nie musi być przesyłany, ale musi być typem rozpoznawanym przez MIDL. Aby przeprowadzić marshaling typu nieznanego w MIDL, użyj atrybutu ACF [ user_marshal].

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.

Należy podać procedury określania rozmiaru, marshalingu i unmarshaling danych, a także zwalniania skojarzonej pamięci. W poniższej tabeli opisano cztery nazwy procedur dostarczonych przez użytkownika. Typ <> jest typem użytkownika określonym w definicji typu [wire_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 programistów 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 <typu>_UserUnmarshali <typów>_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 user_marshal

reguły marshalingu dla user_marshal i wire_marshal

wire_marshal

user_marshal

NdrGetUserMarshalInfo